【发布时间】:2015-11-07 22:18:16
【问题描述】:
我遇到了这个解释 无法完成的答案,但我想知道为什么。
Updating an item property within IEnumerable but the property doesn't stay set?
以这段代码为例:
var MyClasses = new[] { 1, 2, 3, 4 }.Select(id => new MyClass { Id = id });
MyClass BobClass = MyClasses.FirstOrDefault(_mc => _mc.Id == 3);
BobClass.FirstName = "Bob";
Console.WriteLine("Id: {0}, FirstName: {1}", BobClass.Id, BobClass.FirstName);
foreach (var MyClass in MyClasses)
{
Console.WriteLine("Id: {0}, FirstName: {1}", MyClass.Id, MyClass.FirstName);
}
- 我创建了一个集合。
- 我使用
FirstOrDefault()从集合中获取Id == 3 的元素。这让我获得了对集合中元素的引用。 - 我将其 FirstName 属性设置为 Bob
- 当我遍历列表时,FirstName 仍然为空。
我不明白这是如何工作的。我清楚地得到了对原始对象的引用,但几乎就像FirstOrDefault() 给我的只是对象的副本,而不是引用。我可以更新副本,但它显然不会保留到原始副本,因为它们是两个完全独立的实体。
更新
哇,这很有趣:
BobClass = MyClasses.FirstOrDefault(mc => object.ReferenceEquals(BobClass, mc));
Bob 返回null...?不得不说...我肯定在这里受阻。
【问题讨论】:
标签: .net reference ienumerable