匿名类型、枚举器和Lambda表达式

6

使用:

    var Foo = new[]{ new {Something = 321}};

为什么可以进行编译:

    Console.WriteLine( Foo[0].Something );

但不包括:

     Foo.ForEach(x => Console.WriteLine(x.Something));

编译错误实际上是什么? - LexyStardust
无法解析符号 Something - Christophe Debove
不是foreach引起了错误,而是我无法访问x的成员。 - Christophe Debove
1
@ChristopheDebove:ForEach确实会生成编译器错误。您确定这是您真正使用的代码吗? - Heinzi
@Heinzi 你是对的,我重新启动了VS,然后它告诉我有编译错误。 - Christophe Debove
2个回答

7

由于Array只有静态的ForEach方法:

var Foo = new[] { new { Something = 321 } };
Array.ForEach(Foo, x => Console.WriteLine(x.Something));

编译并运行。


4

尝试

 Foo.ToList().ForEach(x => Console.WriteLine(x.Something));

相反,由于ForEach扩展仅适用于列表,因此需要一些解决方案。 编辑:经过测试,可以正常工作。 编辑2:一些解决方案可创建“匿名列表”。 此SO帖子
此博客文章
另一篇博客文章

不是foreach引起了错误,而是我无法访问x的成员。 - Christophe Debove
@ChristopheDebove 我刚刚在一个测试项目中尝试了我的代码片段,它编译并按预期执行。你现在遇到了哪个错误? - Louis Kottmann
@ChristopheDebove,如果您不想使用linq,则可以使用namesv提供的其他答案,使用Array.ForEach。请注意,它是一个静态方法而不是实例方法。 - Terkel
好的,这解决了我的第一个问题。但前者解释了后者。 - Christophe Debove
看起来KIRILL OSENKOV的帖子大致上就是你跟我解释的内容。好的,今晚我会少睡一点但不会再那么愚蠢了。 - Christophe Debove
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接