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

C#中foreach迭代GroupBy匿名类型Key时如何获取特定值

报错根因

当前用作分组Key的是C#编译生成的匿名类型,这类类型完全不支持索引器语法,没法用对象["属性名"]的方括号形式取值,这是触发编译错误的直接原因。
另外你代码里写的item3也和实际的属性名对不上:你在GroupBy里写的new { x.Item1, x.Item2, x.Item3 }是C#的投影简写,生成的匿名对象属性名和引用的源属性名完全一致,也就是Item1、Item2、Item3,根本不存在小写开头的item3属性。

修正后的可运行代码

匿名类型的属性直接用点语法访问就可以,不需要索引器,调整后的实现:

var groupedByList = firstList.Where(x => x.Cost != 0)
                             .GroupBy(x => new { x.Item1, x.Item2, x.Item3 });

foreach (var item in groupedByList)
{
    // 直接通过点语法取Key内的属性值
    var val = item.Key.Item3;
}
补充注意点
  • 这种点语法访问是匿名类型的标准用法,编译期就会做类型校验,运行时没有额外开销,是这类场景下性能最好的写法。
  • 如果你的业务确实需要支持“通过字符串键动态取值”的逻辑,就不要用匿名类型当分组Key,可以换成支持索引访问的结构(比如强类型自定义类、字典),但这类写法会带来额外的内存和性能损耗,非必要不要用。

内容的提问来源于stack exchange,提问作者prodigy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 13:24:04