2017-02-16 83 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