为什么作为引用的对象属性不更新
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么作为引用的对象属性不更新相关的知识,希望对你有一定的参考价值。
考虑此代码
class Program
static void Main(string[] args)
var lst = new List<MyObj>()
new MyObj() name = "Old1", weight = 1,
new MyObj() name = "Old2", weight = 2
;
lst.Join(GetList(), p => p.weight, q => q, (p, q) =>
p.name = "new";
return p;
);
lst.ForEach(p => Console.WriteLine(p.name));
public class MyObj
public string name get; set;
public int weight get; set;
public static List<int> GetList()
return new List<int>() 1,2;
此代码的输出为Old1,Old2。我不明白为什么在resultSelector函数中未更新“名称”。这是我的想法:MyObj实例是引用类型,我们正在将其加入,并将其收集在变量p中(我猜这是引用类型,即包含对原始MyObj的引用)。因此,在创建结果的函数内部,它将在原始MyObj所在的内存位置中更新“ name”属性(再次传递引用)。为什么不这样呢?我要去哪里错了?
答案
您没有将Join
结果分配给任何变量,但它返回IEnumerable<T>
。尝试稍微更新一下代码,保存加入的结果并对其进行迭代]
var result = lst.Join(GetList(), p => p.weight, q => q, (p, q) =>
p.name = "new";
return p;
).ToList();
result.ForEach(p => Console.WriteLine(p.name));
在当前代码中,您将查看源代码lst
,该源代码保持不变
以上是关于为什么作为引用的对象属性不更新的主要内容,如果未能解决你的问题,请参考以下文章