繁体   English   中英

检查我的字典是否 <int, list<int> &gt;列表中有一个项目

[英]Checking if my dictionary<int, list<int>> has an item in the list

我现在正在这样做:

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
}
  • 如果car.ID不是myDic的一个键,然后第一个条件是真实的,不存在的第二个条件评价。
  • 如果car.IDmyDic的键, 则将评估第二个条件,并且不会崩溃,因为myDic [car.ID]具有有效值。

如果您在“执行某些操作”时有逻辑, 此方法很有用,因为它使用了字典的良好访问复杂性。 如果“做某事”只是选择值,那么整个循环只是一个过滤器,因此使用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.
}

另一个常用的方法是使用几个简单的保护子句

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

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

    // do something actually
}

(有时可以提高可读性)

您所拥有的都很好,如果左侧的左侧为假,则不会评估&&的右侧。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM