C#中的动态数组

Sid*_*qui 104 c#

有没有在C#中创建动态数组的方法?

Chr*_*tal 146

看看通用列表.

  • 问题(虽然简短且不具说明性)并不是在询问一个通用列表 - 问题可能在于询问`dynamic []`https://msdn.microsoft.com/en-GB/library/dd264736.aspx(动态数组)类型)或`ExpandoObject`https://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject(v=vs.110).aspx我可以-1回答不提这些 (12认同)
  • 只包含文章链接的答案是无益的.无法保证链接保持活动状态. (6认同)
  • @ LukeTO'Brien,动态是在C#4.0中引入的,这个问题在最初被问到这个问题后整整一年发布.OP可能会询问可调整大小的数据结构,如https://en.wikipedia.org/wiki/Dynamic_array (4认同)

Jar*_*Par 82

使用代码示例扩展Chris和Migol的答案.

使用数组

Student[] array = new Student[2];
array[0] = new Student("bob");
array[1] = new Student("joe");
Run Code Online (Sandbox Code Playgroud)

使用通用列表.在引擎盖下,List <T>类使用数组进行存储,但这种方式允许它有效地增长.

List<Student> list = new List<Student>();
list.Add(new Student("bob"));
list.Add(new Student("joe"));
Student joe = list[1];
Run Code Online (Sandbox Code Playgroud)

  • 这个答案比你的@Migol更好,因为这显示了如何实际使用List <>而不是仅仅将其作为关键字提及."半坏" - >"半好" - >好 (15认同)
  • 这个例子是半坏的,因为我们都谈到了ArrayList (2认同)

Meh*_*ANI 52

有时,普通数组比通用列表更受欢迎,因为它们更方便(例如,对于昂贵的计算 - 数值代数应用程序更好的性能,或者用于与R或Matlab等统计软件交换数据)

在这种情况下,您可以在动态启动List后使用ToArray()方法

List<string> list = new List<string>();
list.Add("one");
list.Add("two");
list.Add("three");

string[] array = list.ToArray();
Run Code Online (Sandbox Code Playgroud)

当然,只有当数组的大小从未被知道或事先修复时才有意义.如果您已经知道程序某个点的数组大小,最好将其作为固定长度数组启动.(例如,如果从ResultSet检索数据,则可以计算其大小并动态启动该大小的数组)

  • 如果你*要*将一个数组传递给一个接口,那么它*必须是一个数组.构建一个列表然后在传递它之前将它变成一个数组要容易得多.我比其他人更喜欢这个答案,因为它解决了这个问题! (9认同)
  • Ararys不是更方便(它们提供List <T>接口的子集)并提供几乎相同的性能,因为List <T>使用下面的常规数组.迭代6000000个元素:列表/用于:1971ms阵列/用于:1864ms(基准来自http://stackoverflow.com/questions/454916/performance-of-arrays-vs-lists) (2认同)

Mig*_*gol 37

List<T>对于强类型的,或者ArrayList如果你有.NET 1.1或喜欢转换变量.


Avn*_*ner 7

您可以使用动态对象来执行此操作:

var dynamicKeyValueArray = new[] { new {Key = "K1", Value = 10}, new {Key = "K2", Value = 5} };

foreach(var keyvalue in dynamicKeyValueArray)
{
    Console.Log(keyvalue.Key);
    Console.Log(keyvalue.Value);
}
Run Code Online (Sandbox Code Playgroud)