2009-10-28 53 views
0

我現在這樣做的一個項目:檢查,如果我的字典<INT,列表<int>>在列表中

foreach(..) 
{ 
if(myDic.ContainsKey(car.ID) && myDic[car.ID].Contains(car.MfgID)) 
{ 

    // do something 
} 
} 

我在想,如果我可以進行檢查,但檢查如果它不存在,然後只是繼續。

我該怎麼做?使用||或者& &?

我不能'假設鑰匙/價值在那裏,所以我不希望它崩潰。

+0

什麼是foreach循環? – CoderDennis 2009-10-28 22:20:43

回答

2
foreach(..) 
{ 
    if(!myDic.ContainsKey(car.ID) || !myDic[car.ID].Contains(car.MfgID)) 
    { 
     continue; 
    } 

    // do something 
} 
  • 如果car.ID不是myDic 然後第一個條件的關鍵是真實 不存在第二 條件評價。
  • 如果car.IDmyDic然後 一個鍵的第二條件進行評估 ,也不會崩潰,因爲 myDic [car.ID]具有有效值。

如果你有一些邏輯「做一些事情」,因爲它使用的字典好訪問的複雜性這種方式是非常有用的。如果「做某事」只是選擇值,所以整個循環只是一個過濾器,使用LINQ查詢更優雅。

1

如果你有LINQ提供,你可以做這樣的事情:

myDic.Any(kvp => kvp.Key == car.ID && kvp.Value.Contains(car.MfgID)); 

想我會加一點點擴大,如果你想過濾列表,你可以做到以下幾點:

var filteredDictionary = myDic.Where(kvp => kvp.Key == car.ID 
             && kvp.Value.Contains(car.MfgID)); 

foreach(...) 
{ 
    ... //Only enumerating over items that match both conditions. 
} 
0

做另一種常見的方法是使用幾個簡單guard clauses

foreach (...) 
{ 
    if (!myDic.ContainsKey(car.ID)) 
     continue; 

    if (!myDic[car.ID].Contains(car.MfgID)) 
     continue; 

    // do something actually 
} 

(它可以提高可讀性有時)

0

你有什麼好,& &右側不計算,如果左側評估爲false。

相關問題