如何根据Sample类的name属性筛选Dictionary<int, Sample>?
正确的字典筛选实现方式
你的代码存在两处核心问题:
kv.Value.name是字符串类型,不能直接调用Where方法(Where仅适用于集合类型);- 你需要的是过滤出符合条件的字典项,而非重新构造匿名对象后转字典,逻辑方向有误。
方式1:筛选name包含"left"(不区分大小写)
先用Where过滤字典的键值对,判断name是否包含目标字符串,再通过ToDictionary生成新字典:
// .NET Core 2.1+/.NET 5+ 可直接用带StringComparison的Contains重载 var match = Fulllist .Where(kv => kv.Value.name.Contains("left", StringComparison.InvariantCultureIgnoreCase)) .ToDictionary(kv => kv.Key, kv => kv.Value);
如果是旧版本.NET框架(不支持带参数的Contains),可以用IndexOf替代:
var match = Fulllist .Where(kv => kv.Value.name.IndexOf("left", StringComparison.InvariantCultureIgnoreCase) >= 0) .ToDictionary(kv => kv.Key, kv => kv.Value);
方式2:精确匹配name等于"left"(不区分大小写)
如果你的实际需求是精确匹配而非包含,代码可改为:
var match = Fulllist .Where(kv => kv.Value.name.Equals("left", StringComparison.InvariantCultureIgnoreCase)) .ToDictionary(kv => kv.Key, kv => kv.Value);
空值防护补充
如果Sample的name可能为null,建议增加空值判断避免异常:
var match = Fulllist .Where(kv => !string.IsNullOrEmpty(kv.Value.name) && kv.Value.name.Contains("left", StringComparison.InvariantCultureIgnoreCase)) .ToDictionary(kv => kv.Key, kv => kv.Value);
内容的提问来源于stack exchange,提问作者Dante1986
相关产品推荐
相关产品推荐

