我现在正在这样做:
foreach(..)
{
if(myDic.ContainsKey(car.ID) && myDic[car.ID].Contains(car.MfgID))
{
// do something
}
}
我想知道我是否可以执行检查,但检查它是否不存在,然后继续执行。
我该怎么做?使用||或&&?
我不能'假设键/值在那里,所以我不希望它崩溃。
答案 0 :(得分:2)
foreach(..)
{
if(!myDic.ContainsKey(car.ID) || !myDic[car.ID].Contains(car.MfgID))
{
continue;
}
// do something
}
如果你在“做某事”中有一些逻辑,这种方式很有用,因为它使用了字典的良好访问复杂性。如果“做某事”只是选择值,那么整个循环只是一个过滤器,使用LINQ查询会更优雅。
答案 1 :(得分: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.
}
答案 2 :(得分:0)
另一种常见的方法是使用几个简单的guard clauses:
foreach (...)
{
if (!myDic.ContainsKey(car.ID))
continue;
if (!myDic[car.ID].Contains(car.MfgID))
continue;
// do something actually
}
(有时可以提高可读性)
答案 3 :(得分:0)
你所拥有的是好的,是&&amp ;;的右侧。如果左侧评估为false,则不评估。