List<String[]> 的 C# "funny"问题

标签 c# arrays list inheritance

我的 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";

所以现在我希望 MyPrimaryList 中第一个数组中的第一个值在 MySecondaryList 中是“onehalf”和“one”。 但我的问题/问题是两个列表都更新为“onehalf”作为两个列表中第一个数组中的第一个值。

你有什么好的解释吗? :)

谢谢!!

最佳答案

String[] 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]);

这需要源数组、目标数组和长度——小心检查数组边界。

这个输出:

onehalf
one

由于每个列表现在都包含对不同数组的引用,因此您可以独立操作数组项。

关于List<String[]> 的 C# "funny"问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20119965/

相关文章:

c# - 如何防止 DateTime 在带有区域性信息的 XML 中序列化?

c# - File.Delete 在调用 Image.FromFile 之前失败,尽管复制了加载的图像并销毁了原始图像

c# - 快速洗牌数字 1 到 4 的方法?

c# - 将2个不同类型的单独列表合并为1个其他类型的新列表

iphone - 在 Objective-C 中复制整数数组的最有效方法是什么?

python - 为什么这个 for 循环在删除列表中的所有项目之前停止?

c++ - 计算两组交集时出现段错误

使用函数式编程和异步的 JavaScript while 循环

python - 将 utf-8 格式的 Python 列表写入 CSV

c++ - 使用排序函数根据函数对列表进行排序