2017-02-16 49 views
0

我需要看看路径是否可用,但只在运行时。因此,如果我的程序检查到文件不存在,它会将invalidPath bool设置为“true”,以便它不会再次跳入“File.Exists ...”查询中,只要程序运行即可。C# - 避免代码重复:嵌套如果语句

问题是:如果我像下面列出的那样做,我认为没有可能避免代码冗余。我需要显示一条消息来通知用户关于丢失的文件,但对两个“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*/ 
    } 

我希望有人能给我一个主意。

回答

1

是否有一个原因,你不想在一个单一的块中组合布尔语句?

private bool invalidPath = false 

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

如果我结合这两个语句,程序/方法将搜索该文件每次当它被称为(通过错误和正确路径),而这正是我试图阻止,因为一直搜索文件会花费不必要的运行时间。 – Klunky

+0

@Klunky实际上,如果第一个条件失败,甚至不会评估以下条件。这被称为“短路”。你可以在这里阅读更多:https://msdn.microsoft.com/en-us/library/2a723cdk(v=vs.71).aspx – omerkarj

+0

哦,我不知道(我没有那么多的经验在C# /。净)。这非常有用。 它减少了一个if语句并且不需要其他变量。这对我来说很理想,谢谢! – Klunky

0

不能使用一个布尔举行双方的信息(检查路径和文件存在)。因此你必须使用第二个布尔值。

的伪代码是这样的:

bool valid = false; 
bool checked = false; 

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

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

然而,你的策略可能有问题。例如,用户可能在程序运行时删除或重命名路径。

2

试试这个:

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

似乎我必须让另一个布尔。谢谢我对这个解决方案感到满意。 – Klunky

+0

太好了。 :)请将此标记为答案,如果您发现这是正确的解决方案。谢谢 – Aditi