You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 17:22:10