gpt4 book ai didi

.net - 如果将事件处理程序添加到 ienumerable 的循环中,为什​​么它永远不会被调用?

转载 作者:行者123 更新时间:2023-12-04 20:59:33 26 4
gpt4 key购买 nike

如果将事件处理程序添加到 ienumerable 的循环中,为什​​么它永远不会被调用?

例如:

IEnumerable<MyType> list = someCollection.Select(i => new MyType(i));

foreach (var item in list)
item.PropertyChanged += item_PropertyChanged; <-- this never gets called

但是如果列表被分配像
list = someCollection.Select(i => new MyType(i)).ToArray();

事件处理程序确实被调用了..

为什么? (我想这与 LINQ 查询是懒惰的事实有关,但循环遍历结果的事实还不够?)

最佳答案

您的 Select call 正在创建 MyType 的新实例, 意思就是...

list键入为 IEnumerable<MyType>那么每次枚举 list 时,您都在处理一系列新的新对象。 .您添加事件处理程序的对象与您随后要测试的对象不同。

list键入为 MyType[] (通过使用 ToArray 调用)那么您每次枚举 list 时都在处理相同的对象集合。 .您添加事件处理程序的对象与您随后要测试的对象相同。

关于.net - 如果将事件处理程序添加到 ienumerable 的循环中,为什​​么它永远不会被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2462311/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com