Mic*_*sen 10 c# arrays inheritance list
我的C#应用程序中的List有一些奇怪的问题.它必须是分配错误或者我做错了(我是普通的C#开发人员).让我举一个接近我的线的例子:
List<String[]> MyPrimaryList = new List<String[]>();
List<String[]> MySecondaryList = new List<String[]>();
String[] array;
String arrayList = "one,two,three,four,five";
array = arrayList.Split(',');
MyPrimaryList.Add(array);
MySecondaryList.Add(array);
MyPrimaryList[0][0] += "half";
Run Code Online (Sandbox Code Playgroud)
所以现在我希望MyPrimaryList中第一个数组中的第一个值在MySecondaryList中是"onehalf"和"one".但我的问题是两个列表都更新为"onehalf"作为两个列表中第一个数组的第一个值.
你有一个很好的解释吗?:)
谢谢!!
DGi*_*bbs 18
String[] array;是一种参考类型.您已将此对象的内存中位置的引用添加到两个列表,因此它们都包含相同的数据.
如果你需要第二个列表,array那么你可以使用Array.Copy:
List<String[]> MyPrimaryList = new List<String[]>();
List<String[]> MySecondaryList = new List<String[]>();
String arrayList = "one,two,three,four,five";
String[] array = arrayList.Split(',');
String[] array2 = new string[5];
Array.Copy(array, array2, 5);
MyPrimaryList.Add(array);
MySecondaryList.Add(array2);
MyPrimaryList[0][0] += "half";
Console.WriteLine(MyPrimaryList[0][0]);
Console.WriteLine(MySecondaryList[0][0]);
Run Code Online (Sandbox Code Playgroud)
这将获取源数组,目标数组和长度 - 小心检查数组边界.
这输出:
onehalf
one
Run Code Online (Sandbox Code Playgroud)
由于每个列表现在都包含对不同数组的引用,因此您可以单独操作数组项.
您正在向两个列表添加相同的数组实例,因此它们指向相同的内存结构.
如果你想让它们独立,你需要克隆它们; 从我的头脑中快速的方法是list.Add(array.ToArray())在其中一个列表中使用linq
| 归档时间: |
|
| 查看次数: |
716 次 |
| 最近记录: |