C# - 避免代码重复:嵌套 if 语句

C# - Avoiding code repetition: Nested if Statement

我需要查看路径是否可用,但只能在运行时查看。因此,如果我的程序检查到该文件不存在,它会将 invalidPath 布尔值设置为 "true",这样只要程序运行,它就不会再次跳入 "File.Exists..." 查询。

问题是:如果我按照下面列出的方式进行操作,我认为没有可能避免代码冗余。我需要显示一条消息来通知用户有关丢失的文件,但是在 "if" 两种情况下使用相同的代码行并不是很优雅。

private bool invalidPath = false

if (!invalidPath)
    {
      if (File.Exists(temp))
      {
          //do code            
      }
      else
      {
          Show.MessageBox("no file found") 
          invalidPath = true   
      }
    }
    else
    {
       Show.Messagebox("no file found")   /*<---thats redundant*/   
    }

希望有人能给我出出主意

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

private bool invalidPath = false

if (!invalidPath && File.Exists(temp)) {
    //do code            
}
else {
    Show.MessageBox("no file found") 
    invalidPath = true   
}

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

pseudo-code 看起来像这样:

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");
            }