This is a console application which takes as an argument either a .cs file or a directory. If it's a .cs file, it scans it; if it's a directory, it scans all .cs files within the directory.A simplified view of a method which chooses whether it's a file or a directory and reports errors is this one:public static void ProcessPath(string path){    if (path.EndsWith(.cs))    {        if (File.Exists(path))        {            Program.ScanFile(path);        }        else        {            Console.WriteLine(The specified file doesn't exist.);            Environment.Exit(1);        }    }    else    {        if (Directory.Exists(path))        {            Program.ScanDirectory(path);        }        else        {            if (File.Exists(path))            {                Console.WriteLine(The path corresponds to a file, but only *.cs files are supported.);            }            else            {                Console.WriteLine(The specified directory doesn't exist.);            }            Environment.Exit(1);        }    }}How can I rewrite the if/else logic in a more elegant way? Would it improve readability?
Scanning a .cs file or a directory
c#
In my opinion, the easiest way would be to embrace exceptions. DirectoryNotFoundException and FileNotFoundException are there for a reason, and actually even calling .Exists might not save you from them - the file might be moved/removed between the Exists and the action you're taking next.You can do:public static void ProcessPath(string path){    var extension = Path.GetExtension(path);    if(string.IsNullOrEmpty(extension))    {        Program.ScanDirectory(path);    }    else    {        if(extension != .cs)            throw new NotSupportedException(Only .cs files are supported);        Program.ScanFile(path);    }}And either catch those exceptions higher up and write them to console or (considering you're doing Environment.Exit in your example), just let them propagate and crash the application.