当我使用lambda表达式时,我不知道为什么列表中的项目已被更改。 这是我的代码
using System;
using System.Collections.Generic;
using System.Linq;
public class test
{
public string id { get; set; }
public string name { get; set; }
public string no { get; set; }
}
public class Program
{
public static List<test> a;
public static List<test> b = new List<test>();
public static List<test> a_list()
{
List<test> c = new List<test>();
c.Add(new test() { id = "_01", name=null, no="1"});
c.Add(new test() { id = "_02", name=null, no="2"});
return c;
}
public static void Main()
{
a = a_list();
string key = "_01";
//
test i = new test();
i = a.First(x => x.id.Equals(key));
i.name = "xxxxxxx";
b.Add(i);
//
Console.WriteLine("id:"+a[0].id+"\nName:"+a[0].name+"\nno:"+a[0].no);
Console.WriteLine("id:"+b[0].id+"\nName:"+b[0].name+"\nno:"+b[0].no);
Console.ReadLine();
}
}
这是结果 ID:_01 名称:XXXXXXX 无:1 ID:_01 名称:XXXXXXX NO:1
为什么[0]等于&#34; xxxxxxx&#34;? (对不起,我的英语不好)
答案 0 :(得分:3)
这里:
IncidentResolution
i = a.First(x => x.id.Equals(key));
i.name = "xxxxxxx";
和i
现在是对同一对象的引用。修改该对象的属性将影响这两者,因为它们是指向同一事物的指针。
答案 1 :(得分:0)
基本上你的代码是做什么的:
a
)b
)结果是你有两个列表 - 一个(a
)包含两个元素,另一个(b
)只有一个,但是(这里是重要的一点) - 它是完全相同的元素作为a
中的第一个元素。因此,当您编写两个列表的第一个元素时,结果是相同的。
答案 2 :(得分:0)
想象一下,你有一个相机指着一辆车。当车门打开时,您可以通过相机看到它,但相机不是汽车。
现在你的朋友在一段距离之外也把他的相机对准了车。你们都可以看到门打开和关闭,灯光等等。
变量就像相机一样,汽车就是它指向的对象。 如果您关闭或摧毁其中一个摄像头,那么汽车仍在那里。事实上,如果你摧毁了两个摄像头,汽车仍然在那里(直到垃圾收集)。
请参阅此优秀文章:http://codebetter.com/karlseguin/2008/04/28/foundations-of-programming-pt-7-back-to-basics-memory/