If statement 避免代码重复:嵌套的if语句

If statement 避免代码重复:嵌套的if语句,if-statement,nested,redundancy,If Statement,Nested,Redundancy,我需要查看路径是否可用,但仅在运行时可用。因此,如果我的程序检查文件不存在,它会将invalidPath bool设置为“true”,这样,只要程序运行,它就不会再次跳转到“file.Exists…”查询中 问题是:如果我像下面列出的那样做,我认为没有可能避免代码冗余。我需要显示一条消息来通知用户丢失的文件,但是在两个“if”情况下使用相同的代码行不是很优雅 private bool invalidPath=false 如果(!invalidPath) { 如果(文件存在(临时)) { //执行

我需要查看路径是否可用,但仅在运行时可用。因此,如果我的程序检查文件不存在,它会将invalidPath bool设置为“true”,这样,只要程序运行,它就不会再次跳转到“file.Exists…”查询中

问题是:如果我像下面列出的那样做,我认为没有可能避免代码冗余。我需要显示一条消息来通知用户丢失的文件,但是在两个“if”情况下使用相同的代码行不是很优雅

private bool invalidPath=false
如果(!invalidPath)
{
如果(文件存在(临时))
{
//执行代码
}
其他的
{
Show.MessageBox(“未找到文件”)
invalidPath=true
}
}
其他的
{

Show.Messagebox(“未找到文件”)/*是否有原因不希望将布尔语句组合到单个if块中

i、 e


您不想将布尔语句组合到单个if块中有什么原因吗

i、 e


不能使用一个布尔值同时保存这两个信息(路径已检查且文件已存在)。因此,必须使用第二个布尔值

伪代码如下所示:

bool valid = false;
bool checked = false;

if(!checked)
{
  valid = File.Exists("bla");
  checked = true;
}

if(!valid)
{
  MessageBox("Path does not exist");
}

但是,您的策略可能有问题。例如,当您的程序运行时,用户可能会删除或重命名路径。

您不能使用一个布尔值同时保存这两个信息(路径已选中且文件已存在)。因此,您必须使用第二个布尔值

伪代码如下所示:

bool valid = false;
bool checked = false;

if(!checked)
{
  valid = File.Exists("bla");
  checked = true;
}

if(!valid)
{
  MessageBox("Path does not exist");
}
但是,您的策略可能有问题。例如,当您的程序运行时,用户可能会删除或重命名路径。

请尝试以下操作:

            bool invalidPath = false;
            bool fileExistsflag = false;               
            if (!invalidPath)
            {
                if (File.Exists(temp))
                {
                    //do code  
                    fileExistsflag = true;
                }
                else
                {
                    invalidPath = true;
                }
            }
            if (!fileExistsflag || invalidPath)
            { 
                MessageBox.Show("no file found");
            }
试试这个:

            bool invalidPath = false;
            bool fileExistsflag = false;               
            if (!invalidPath)
            {
                if (File.Exists(temp))
                {
                    //do code  
                    fileExistsflag = true;
                }
                else
                {
                    invalidPath = true;
                }
            }
            if (!fileExistsflag || invalidPath)
            { 
                MessageBox.Show("no file found");
            }

如果我将这两条语句组合在一起,程序/方法将在每次调用文件时(通过错误和正确的路径)搜索该文件这就是我试图阻止的,因为一直搜索文件会花费不必要的运行时间。@Klunky事实上,如果第一个条件失败,以下条件甚至不会被评估。这叫做“短路”。你可以在这里阅读更多内容:哦,我不知道(我在C#/.NET方面没有那么多经验)。这非常有用。它减少了一个if语句,不需要进一步的变量。这对我来说非常理想,谢谢!如果我将这两个语句结合起来,程序/方法将在每次调用文件时搜索它(通过错误和正确的路径)这就是我试图阻止的,因为一直搜索文件会花费不必要的运行时间。@Klunky事实上,如果第一个条件失败,以下条件甚至不会被评估。这叫做“短路”。你可以在这里阅读更多内容:哦,我不知道(我在C#/.NET方面没有那么多经验)。这是非常有用的。它减少了一个if语句,不需要进一步的变量。这对我来说非常理想,谢谢!似乎我必须再做一个bool。谢谢,我对这个解决方案很满意。太好了。:)如果你发现这是正确的解决方案,请将此标记为答案。谢谢,我必须再做一个bool。谢谢,我对这个很满意很好。如果您认为这是正确的解决方案,请将此标记为答案。谢谢