linq VS中的行为真的很奇怪,我可以用ForEach的错误使用来构建

oknrviil  于 2023-06-19  发布在  其他
关注(0)|答案(1)|浏览(94)

我有以下代码:

var myCollection = myOriginalCollection.Select(e => _mapper.Map<MyType>(e.Item2));
    myCollection.ForEach(myObject => myObject.myProp = myValue);

这编译,它的事实,它运行-我一直在测试它,它不throw
这里有两件事很奇怪:

  • 我应该无法在IEnumerable<T>上调用ForEach,并且我可以确认myCollection肯定是IEnumerable<T>
  • 最奇怪的是-如果我在第一行添加ToList(这样myCollection就变成了List<T>而不是IEnumerable<T>),然后 * 我删除了ToList,突然我的代码就无法编译了。我不能再在我的IEnumerable<T>上调用ForEach了,这是意料之中的。

这是VS/编译器中的一些bug吗?我以前从没见过这样的事

sxissh06

sxissh061#

我相信这是他们所说的PEBCAK(“计算机和键盘之间存在问题”)的例子。
我们(显然)正在使用一个名为ParseLibrary.Utilities的库,它有IEnumerable<T>的扩展名!
为什么添加ToList()(然后删除它)会破坏它,是因为我配置了VS,以在保存时删除未使用的命名空间。因此,当我添加ToList时,ForEach不再来自该库,因此当我点击保存时,它会剥离using ParseLibrary.Utilities

相关问题