c# - 从 C# 通用字典中过滤掉值

标签 c# generics dictionary filtering

我有一个 C# 字典,Dictionary<Guid, MyObject>我需要根据 MyObject 的属性进行过滤.

例如,我想从字典中删除所有MyObject.BooleanProperty = false 的记录.实现这一目标的最佳方式是什么?

最佳答案

如果您不关心用所需项目创建新字典并丢弃旧字典,只需尝试:

dic = dic.Where(i => i.Value.BooleanProperty)
         .ToDictionary(i => i.Key, i => i.Value);

如果你不能创建一个新的字典并且由于某种原因需要改变旧的(比如当它被外部引用并且你不能更新所有的引用时:

foreach (var item in dic.Where(item => !item.Value.BooleanProperty).ToList())
    dic.Remove(item.Key);

请注意,ToList 在这里是必需的,因为您正在修改基础集合。如果更改基础集合,则在其上工作以查询值的枚举器将无法使用,并将在下一次循环迭代中抛出异常。 ToList 在完全改变字典之前缓存值。

关于c# - 从 C# 通用字典中过滤掉值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2131648/

相关文章:

java - 从 Pig 中的 UDF(Java) 返回 Map

c# - 有没有办法调用通用的methodInfo?

c# - 从文件中删除一行

c# - .NET 对象创建,什么更快?

c# - .NET 是否有一种简单的方法来处理溢出列表?

swift - 我可以在 UserDefaults 上存储哪种类型的字典或数组有任何限制吗?

C# net core巧妙简化Lambda表达式 - 更新

c# - 无法处理泛型中的 IEnumerable<int?>

java - 如何编写加法的通用方法

c++ - 它无法将 C++ 映射结构编译为 map<A, pair<B, C>>