有没有在C#中创建动态数组的方法?
答案 0 :(得分:144)
答案 1 :(得分:79)
使用代码示例扩展Chris和Migol的答案。
使用数组
Student[] array = new Student[2];
array[0] = new Student("bob");
array[1] = new Student("joe");
使用通用列表。在引擎盖下,List< T> class使用数组进行存储,但这种方式允许它有效地增长。
List<Student> list = new List<Student>();
list.Add(new Student("bob"));
list.Add(new Student("joe"));
Student joe = list[1];
答案 2 :(得分:49)
有时普通数组比通用列表更受欢迎,因为它们更方便(例如,对于昂贵的计算 - 数值代数应用程序更好的性能,或者用R或Matlab等统计软件交换数据)
在这种情况下,您可以在动态启动List后使用ToArray()方法
List<string> list = new List<string>();
list.Add("one");
list.Add("two");
list.Add("three");
string[] array = list.ToArray();
当然,只有当数组的大小从未被知道或修复 ex-ante 时才有意义。 如果您已经知道程序的某个位置的数组大小,最好将其作为固定长度数组启动。 (例如,如果从ResultSet中检索数据,则可以计算其大小并动态启动该大小的数组)
答案 3 :(得分:37)
List<T>
,如果您有.NET 1.1或喜欢投射变量,则为ArrayList
。
答案 4 :(得分:1)
使用数组列表,它实际上是实现数组。它需要最初大小为4的数组,当它变满时,会创建一个新的数组,其双倍大小和第一个数组的数据被复制到第二个数组,现在新项目被插入到新数组中。 第二个数组的名称也会创建第一个别名,以便可以使用与之前相同的名称访问它,并且第一个数组将被释放
答案 5 :(得分:1)
动态数组示例:
Console.WriteLine("Define Array Size? ");
int number = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Enter numbers:\n");
int[] arr = new int[number];
for (int i = 0; i < number; i++)
{
arr[i] = Convert.ToInt32(Console.ReadLine());
}
for (int i = 0; i < arr.Length; i++ )
{
Console.WriteLine("Array Index: "+i + " AND Array Item: " + arr[i].ToString());
}
Console.ReadKey();
答案 6 :(得分:1)
您可以使用collections类中的arraylist对象
using system.collections;
static void main()
{
Arrylist arr=new Arrylist();
}
n您想添加可以使用的元素
arr.add();
答案 7 :(得分:0)
这个答案似乎是您正在寻找的答案Why can't I do this: dynamic x = new ExpandoObject { Foo = 12, Bar = "twelve" }
了解ExpandoObject
此处https://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject(v=vs.110).aspx
此处dynamic
类型https://msdn.microsoft.com/en-GB/library/dd264736.aspx
答案 8 :(得分:0)
您可以对动态对象执行此操作:
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);
}