我在项目中使用静态变量时遇到问题(强制使用静态变量)
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
}
当我使用 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
将列表存储在列表中会产生相同的结果:您指向相同的原始列表。
如果您想存储 a
的副本在list[0]
,然后制作副本:
list.Add(new List<int>(a));
或者使用linq使其更加简洁:
list.Add(a.ToList());
(确保将 using System.Linq;
指令添加到代码文件的顶部)
关于c# - 在 C# 中使用静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17615089/