C#结构如果..如果......如果

Ken*_*ley 2 c# io

我正在使用Visual Studio 2013 Express,我是Visual C#的新手.我相信有更好的方法来做我正在尝试的事情,我将不胜感激任何建议.

我正在尝试编写的代码评估一系列测试,并且只有在所有测试都为TRUE时才设置标志.我目前正在使用六个嵌套if结构来完成这项工作,虽然它有效,但我正在寻找一种更清洁,更专业的解决方案.这是示例(此帖子缩短为三个级别):

private const string sDrive = "D:\\";
private const string sFolder = "FTP\\";
private const string sDivFolder = "ABC";
private static bool bSanity = false;

private static void SanityCheck()
{
    if (Directory.Exists(sDrive))
    {
        if (Directory.Exists(sDrive + sFolder))
        {
            if (Directory.Exists(sDrive + sFolder + sDivFolder))
            {
                bSanity = true;
            }
            else
            {
                Console.WriteLine("FATAL: Div folder doesn't exist.");
            }
        }
        else
        {
            Console.WriteLine("FATAL: Root folder doesn't exist.");
        }
    }
    else
    {
        Console.WriteLine("FATAL: Disk drive doesn't exist.");
    }
}  
Run Code Online (Sandbox Code Playgroud)

Ree*_*sey 6

主要问题是您是否需要保留现在的相同错误报告.一般来说,如果需要,我认为通过反转案例可以更容易处理.这将允许您使用if/ 删除嵌套else if:

private static void SanityCheck()
{ 
    if (!Directory.Exists(sDrive))
    {
       Console.WriteLine("FATAL: Disk drive doesn't exist.");
    }
    else if (!Directory.Exists(Path.Combine(sDrive, sFolder))
    {
       Console.WriteLine("FATAL: Root folder doesn't exist.");
    }
    else if (!Directory.Exists(Path.Combine(sDrive, sFolder, sDivFolder))
    {
        Console.WriteLine("FATAL: Div folder doesn't exist.");
    }
    else
    {
        bSanity = true;
    }
}  
Run Code Online (Sandbox Code Playgroud)

如果不需要详细的错误报告,您可以直接检查最低级别的文件夹:

private static void SanityCheck()
{

    if (Directory.Exists(Path.Combine(sDrive, sFolder, sDivFolder))
         bSanity = true;
    else
        Console.WriteLine("FATAL: Drive or folder doesn't exist.");
}
Run Code Online (Sandbox Code Playgroud)