我現在這樣做的一個項目:檢查,如果我的字典<INT,列表<int>>在列表中
foreach(..)
{
if(myDic.ContainsKey(car.ID) && myDic[car.ID].Contains(car.MfgID))
{
// do something
}
}
我在想,如果我可以進行檢查,但檢查如果它不存在,然後只是繼續。
我該怎麼做?使用||或者& &?
我不能'假設鑰匙/價值在那裏,所以我不希望它崩潰。
我現在這樣做的一個項目:檢查,如果我的字典<INT,列表<int>>在列表中
foreach(..)
{
if(myDic.ContainsKey(car.ID) && myDic[car.ID].Contains(car.MfgID))
{
// do something
}
}
我在想,如果我可以進行檢查,但檢查如果它不存在,然後只是繼續。
我該怎麼做?使用||或者& &?
我不能'假設鑰匙/價值在那裏,所以我不希望它崩潰。
foreach(..)
{
if(!myDic.ContainsKey(car.ID) || !myDic[car.ID].Contains(car.MfgID))
{
continue;
}
// do something
}
如果你有一些邏輯「做一些事情」,因爲它使用的字典好訪問的複雜性這種方式是非常有用的。如果「做某事」只是選擇值,所以整個循環只是一個過濾器,使用LINQ查詢更優雅。
如果你有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.
}
做另一種常見的方法是使用幾個簡單guard clauses:
foreach (...)
{
if (!myDic.ContainsKey(car.ID))
continue;
if (!myDic[car.ID].Contains(car.MfgID))
continue;
// do something actually
}
(它可以提高可讀性有時)
你有什麼好,& &右側不計算,如果左側評估爲false。
什麼是foreach循環? – CoderDennis 2009-10-28 22:20:43