我想从 List 中提取数组,而不使用 ToArray() 函数使其生成一个全新的数组。
我不关心数组中是否有多余的东西等,我只想引用列表使用的数组。
编辑:
对于不明白的人:列表在内部使用数组来存储您的元素。当您执行 ToArray() 时,它实际上会生成一个全新的数组,如果数组很大,这可能会很昂贵。我只想引用列表使用的原始数组。
我想从 List 中提取数组,而不使用 ToArray() 函数使其生成一个全新的数组。
我不关心数组中是否有多余的东西等,我只想引用列表使用的数组。
编辑:
对于不明白的人:列表在内部使用数组来存储您的元素。当您执行 ToArray() 时,它实际上会生成一个全新的数组,如果数组很大,这可能会很昂贵。我只想引用列表使用的原始数组。
您可以使用反射来获取包含内部数组的私有字段。
例子:
List<string> s = new List<string>();
s.Add("1");
s.Add("2");
s.Add("3");
s.Add("4");
FieldInfo info = s.GetType().GetField("_items", BindingFlags.Instance | BindingFlags.NonPublic);
string[] items = (string[])info.GetValue(s);
for (int i = 0; i < s.Count; i++) {
Console.WriteLine(items[i]);
}
您可能已经意识到这一点,但是如果不包括它,我就无法写出这样的答案:
Count
) 大小的项目可能具有不可预测的值。我根本不明白你的问题,但如果你想将你的列表放入另一个数组而不使用,.ToArray
那么你总是可以foreach
在列表上使用 a 并遍历每个元素。(我不确定你为什么要这样做,因为它非常占用 CPU。)