Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从列表中提取数组而不使其生成新数组_C#_List_Collections - Fatal编程技术网

C# 从列表中提取数组而不使其生成新数组

C# 从列表中提取数组而不使其生成新数组,c#,list,collections,C#,List,Collections,我想从列表中提取数组,而不使用ToArray函数使其生成一个完整的新数组 我不关心数组中是否有多余的内容,等等,我只想引用列表使用的数组 编辑: 对于不理解的人:列表在内部使用数组来存储元素。当您使用阵列时,它实际上会生成一个完整的新阵列,如果阵列很大,这可能会很昂贵。我只想引用列表使用的原始数组。veryconfused 我完全不理解你的问题,但是如果你想把你的列表放到另一个数组中而不使用.ToArray,那么你可以在列表中使用foreach并遍历每个元素。我不知道为什么要这样做,因为它占用大

我想从列表中提取数组,而不使用ToArray函数使其生成一个完整的新数组

我不关心数组中是否有多余的内容,等等,我只想引用列表使用的数组

编辑:

对于不理解的人:列表在内部使用数组来存储元素。当您使用阵列时,它实际上会生成一个完整的新阵列,如果阵列很大,这可能会很昂贵。我只想引用列表使用的原始数组。

veryconfused
我完全不理解你的问题,但是如果你想把你的列表放到另一个数组中而不使用.ToArray,那么你可以在列表中使用foreach并遍历每个元素。我不知道为什么要这样做,因为它占用大量CPU。

您可以使用反射来获取包含内部数组的私有字段

例如:

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]);
}
你可能已经意识到了这一点,但如果不包括它,我就无法写出这样的答案:

访问框架类的私有成员没有文档记录,并且不能以可靠的方式完成。 这只在私有字段的名称保持不变的情况下有效。 列表仍在使用您获得的数组,因此更改数组项将影响列表。 更改列表将更改数组项,或者使列表放弃该数组并用新数组替换它。 数组中超出列表计数大小的项可能具有不可预测的值。
让我们知道你是如何开始的为什么要这样做的?@Tyler因为我需要给一个指向某个函数的数组指针,而为了性能,我不想生成一个新数组。@BlazArt这正是为什么你不应该比函数参数更严格的原因。如果方法的编写者使用IList或IEnumerable编写它(如果他只需要迭代它),那么您就不会处于这种状态。@BlazArt您真的不想这样做。使用列表的全部意义在于,数组是一个无法推理的实现细节。可以对类的实现进行更改,这可能会破坏尝试执行此操作的代码。如果确实需要这样做,我建议您编写自己的类型来包装数组并根据需要调整其大小,其中它是公开底层数组的公共API的一部分。这与生成新数组相同。你只是换了一种方式而已。