use*_*300 2 c# static reference list
在我的项目中使用静态变量时遇到问题(强制使用静态变量)
public static List<int> a = new List<int>();
public static List<List<int>> list = new List<List<int>>();
public Form1()
{
for (int i = 0; i < 5;i++ )
a.Add(i);
list.Add(a);
Console.WriteLine(list[0].Count); // **count = 5**
a.RemoveAt(0);
list.Add(a);
Console.WriteLine(list[0].Count); // **count = 4**
Console.WriteLine(list[1].Count); // count = 4
}
Run Code Online (Sandbox Code Playgroud)
当我使用时a.RemoveAt(0),它会list[0]改变.为什么这样做,我该如何解决?
嗯,是的,你指的是同一个对象,因为它List<T>是一个引用类型.请参阅:http://msdn.microsoft.com/en-us/library/s6938f28.aspx
例如:
List<int> a = new List<int>();
List<int> b = a;
Console.WriteLine(Object.ReferenceEquals(a, b)); //true
a.Add(1);
Console.WriteLine(a[0]); //1
Console.WriteLine(b[0]); //1
a[0] = 9000;
Console.WriteLine(a[0]); //9000
Console.WriteLine(b[0]); //9000
Run Code Online (Sandbox Code Playgroud)
在列表中存储列表将产生相同的结果:您指向相同的原始列表.
如果要存储in 的副本,请复制:alist[0]
list.Add(new List<int>(a));
Run Code Online (Sandbox Code Playgroud)
或者使用linq使其更简洁:
list.Add(a.ToList());
Run Code Online (Sandbox Code Playgroud)
(确保using System.Linq;在代码文件的顶部添加指令)
| 归档时间: |
|
| 查看次数: |
323 次 |
| 最近记录: |