我有以下代码:
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吗?我以前从没见过这样的事
1条答案
按热度按时间sxissh061#
我相信这是他们所说的PEBCAK(“计算机和键盘之间存在问题”)的例子。
我们(显然)正在使用一个名为
ParseLibrary.Utilities
的库,它有IEnumerable<T>
的扩展名!为什么添加
ToList()
(然后删除它)会破坏它,是因为我配置了VS,以在保存时删除未使用的命名空间。因此,当我添加ToList
时,ForEach
不再来自该库,因此当我点击保存时,它会剥离using ParseLibrary.Utilities
。