作者:N个小灰流_701 | 2023-08-30 09:05
有没有在C#中创建动态数组的方法?
1> Chris Van Op..:
看看通用列表.
问题(虽然简短且不具说明性)并不是在询问一个通用列表 - 问题可能在于询问`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回答不提这些
只包含文章链接的答案是无益的.无法保证链接保持活动状态.
@ LukeTO'Brien,动态是在C#4.0中引入的,这个问题在最初被问到这个问题后整整一年发布.OP可能会询问可调整大小的数据结构,如https://en.wikipedia.org/wiki/Dynamic_array
2> JaredPar..:
使用代码示例扩展Chris和Migol的答案.
使用数组
Student[] array = new Student[2];
array[0] = new Student("bob");
array[1] = new Student("joe");
使用通用列表.在引擎盖下,List 类使用数组进行存储,但这种方式允许它有效地增长.
List list = new List();
list.Add(new Student("bob"));
list.Add(new Student("joe"));
Student joe = list[1];
这个答案比你的@Migol更好,因为这显示了如何实际使用List <>而不是仅仅将其作为关键字提及."半坏" - >"半好" - >好
这个例子是半坏的,因为我们都谈到了ArrayList
3> Mehdi LAMRAN..:
有时,普通数组比通用列表更受欢迎,因为它们更方便(例如,对于昂贵的计算 - 数值代数应用程序更好的性能,或者用于与R或Matlab等统计软件交换数据)
在这种情况下,您可以在动态启动List后使用ToArray()方法
List list = new List();
list.Add("one");
list.Add("two");
list.Add("three");
string[] array = list.ToArray();
当然,只有当数组的大小从未被知道或事先修复时才有意义.如果您已经知道程序某个点的数组大小,最好将其作为固定长度数组启动.(例如,如果从ResultSet检索数据,则可以计算其大小并动态启动该大小的数组)
如果你*要*将一个数组传递给一个接口,那么它*必须是一个数组.构建一个列表然后在传递它之前将它变成一个数组要容易得多.我比其他人更喜欢这个答案,因为它解决了这个问题!
Ararys不是更方便(它们提供List
接口的子集)并提供几乎相同的性能,因为List 使用下面的常规数组.迭代6000000个元素:列表/用于:1971ms阵列/用于:1864ms(基准来自http://stackoverflow.com/questions/454916/performance-of-arrays-vs-lists)
4> Migol..:
List
对于强类型的,或者ArrayList
如果你有.NET 1.1或喜欢转换变量.