在LINQ语句中创建新对象时,例如:
var list = new List<string>() { "a","b","c" }; var created = from i in list select new A();
A类看起来像这样:
class A { public string Label; }
foreach (var c in created) { c.Label = "Set"; }
为什么以后在IEnumerable中访问对象时没有设置值.例如.以下断言失败:
Assert.AreEqual("Set",created.ElementAt(2).Label);
我不知道为什么会发生这种情况.我期望foreach-statement执行查询,并触发对象的创建. MSDN文档规定:“Execution of the query is deferred until the query variable is iterated over in a foreach or For Each loop”.
我已经用.NET 4.5和Mono 3.2.0转载了这个行为.在访问创建的对象之前,在IEnumerable上调用ToList会使此问题消失.
解决方法
原文地址:https://www.jb51.cc/csharp/93914.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。