在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。 这种情况更友好。
解决方法:
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 ();
如果我是你,我会把你正在迭代的列表的长度作为数组大小,因为数组必须以固定的大小声明