在C#中声明二维数组而不知道它的大小

我想使用2-Darrays但我不能提前知道它的大小。 所以我的问题是:如何申报呢? 然后如何在其中添加值?

String[,] tabConfig = new String[?, 4]; foreach(blabla with i) { tabConfig[i, 0] = a; tabConfig[i, 1] = b; tabConfig[i, 2] = c; tabConfig[i, 3] = d; } 

我知道我也可以使用列表,但我不是很熟悉它。

谢谢!

编辑:支持你自己! 在Jon Skeet的帮助下,我的真实代码来了!

 List tabConfig = new List(); String[] temp = new String[4];//The array that will be inside the List int line = 0, column = 0; foreach (XmlNode e in doc.DocumentElement.ChildNodes) { if (e.Attributes["Server"].Value == choice) { temp[0] = e.Attributes["Serveur"].Value;//Here is value 'a' column = 1; foreach (XmlNode i in e.ChildNodes) { temp[colonne] = i.InnerText;//Here are values 'b', 'c' and 'd' column++; } tabConfig.Add(temp);//Put a new line into the List line++; } } 

并称之为:

 foreach(string[] array in tabConfig) foreach(String txt in array) Console.WriteLine(txt); 

所以我的问题是:如何申报呢?

你不能。 .NET中的所有数组都是固定大小的:如果不知道大小,则无法创建数组实例。

它看起来像你应该有一个List – 我实际上创建了一个类来保存这四个属性,而不是仅仅使用数组的四个元素。 您可以使用数组列表:

 List tabConfig = new List(); foreach (...) { tabConfig.Add(new string[] { a, b, c, d }); } 

…但是你需要知道这四个元素在排序等方面意味着什么,这可能会使你的其余代码更难理解。

你可以用一个

 List> 

对此,不,你呢?

你可能更喜欢使用类似的字典

 IDictionary> myContainer = new Dictionary>(); myContainer.Add("key1", new List()); myContainer["key1"].Add("SomeTYPE-1"); myContainer["key1"].Add("SomeTYPE-2"); myContainer["key1"].Add("SomeTYPE-3"); myContainer.Add("key2", new List()); myContainer["key2"].Add("A"); myContainer["key2"].Add("B"); myContainer["key2"].Add("C"); 

更新如@jon所评论,如果您想通过某种forms的密钥访问二维数组的元素,则使用字典,这在您的情况下可能/可能没用。 如果你不想要一个基于密钥的字典,那么坚持使用@jon发布的内容。

如果你可以做一个foreach,你可以知道它的大小。 如果您知道尺寸,则可以创建具有所需尺寸的aray。

但我会使用List。 这种情况更友好。

http://www.functionx.com/csharp/builtinclasses/list.htm

解决方法:

 private struct MyStruct { int x; int y; } List myList = new List(); 

做一个这样的课

 public class MyClass { public string one{get;set;} public string two{get;set;} } 

现在你可以列出这个对象了

 List list1=new List(); 

如果我是你,我会把你正在迭代的列表的长度作为数组大小,因为数组必须以固定的大小声明