C#中使用list Add的问题

namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
List a = new List();
record temp = new record();
temp.str = "hey";
a.Add(temp);
temp.str = "hello";
a.Add(temp);
return;
}
}
class record
{
public string str;
}
}

为什么运行之后a中的两个都是hello而不是第一个hey第二个hello。
另外还有一点,如果把List a = new List();写在main函数外面,为什么会报错说:
错误 1 非静态的字段、方法或属性“ConsoleApplication2.Program.a”要求对象引用

我来帮他解答

 
提问者采纳
2011-05-15 21:25
朋友,你添加了两次temp 到list里是没有错的

你的思路也是正确的,但是你不知道底层的原理 String 对象是引用类型,也就是 你第二次temp.str="hello" 改这个的时候,它不是单单改变量的值,而是改了,对应的内存容量地址的值了,所以2次的值都是一样的

你这样改下就不会一样了
List a = new List();
record temp = new record();
temp.str = "hey";
a.Add(temp);
temp=new record(); //注意是这样,一定要加上,这个的意思就是再开一个内存空间,这样你改值 的话,就不会把前一个也改了
temp.str = "hello";
a.Add(temp);
return;
原文地址:https://www.cnblogs.com/zcm123/p/3027894.html