繁体   English   中英

在C#中声明不知道其大小的2D数组

[英]Declaring a 2D array without knowing its size in C#

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

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<string[]> tabConfig = new List<string[]>();
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<T> - 我实际上创建了一个类来保存这四个属性,而不是仅仅使用数组的四个元素。 可以使用数组列表:

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

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

你可以使用

List<List<string>> 

对此,不,你呢?

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

IDictionary<string, IList<TYPE>> myContainer = new Dictionary<string, List<TYPE>>();
myContainer.Add("key1", new List<TYPE>());
myContainer["key1"].Add("SomeTYPE-1");
myContainer["key1"].Add("SomeTYPE-2");
myContainer["key1"].Add("SomeTYPE-3");

myContainer.Add("key2", new List<TYPE>());
myContainer["key2"].Add("A");
myContainer["key2"].Add("B");
myContainer["key2"].Add("C");

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

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

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

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

解决方法:

private struct MyStruct
{
    int x;
    int y;
}

List<MyStruct> myList = new List<MyStruct>(); 

做一个这样的课

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

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

List<MyClass> list1=new List<MyClass>();

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM