C# 无法在交错数组中声明对象

C# 无法在交错数组中声明对象,c#,arrays,visual-studio,visual-studio-2013,C#,Arrays,Visual Studio,Visual Studio 2013,因此,我试图制作一个应用程序来计算您在一次地铁交通中所花费的时间,因此我制作了一个station类,并以正常形式制作了一个包含三行的锯齿状数组(每行代表不同的地铁线路),因此我声明数组如下:station[][]lines=new station[3][]然后我像这样声明行 lines[0] = new station[34]; lines[1] = new station[19]; lines[2] = new station[35]; 我在锯齿状数组中声明对象内部的名称和值,如下所示: l

因此,我试图制作一个应用程序来计算您在一次地铁交通中所花费的时间,因此我制作了一个station类,并以正常形式制作了一个包含三行的锯齿状数组(每行代表不同的地铁线路),因此我声明数组如下:
station[][]lines=new station[3][]然后我像这样声明行

lines[0] = new station[34];
lines[1] = new station[19];
lines[2] = new station[35];
我在锯齿状数组中声明对象内部的名称和值,如下所示:

lines[0][0].name = "stationname";
lines[0][0].number = 1;`
但是当我运行程序时,它会给我一个
NullReferenceException
, 我知道我没有正确地声明对象(我认为),我也不知道如何正确地声明它们。 下面是一个更完整的代码示例:

        station[][] lines = new station[3][];
        lines[0] = new station[34];
        lines[0][0] = new station {name = "حلوان", number = 1 };
        lines[0][0].number = 1;
        lines[0][1].name = "عين حلوان";
        lines[0][1].number = 2;
        lines[0][2].name = "جامعة حلوان";
        lines[0][2].number = 3;
        lines[0][3].name = "وادى حوف";
        lines[0][3].number = 4;
        lines[0][4].name = "حدائق حلوان";
        lines[0][4].number = 5;
第二排

            lines[1] = new station[19];
        lines[1][0].name = "المنيب";
        lines[1][0].number = 36;
        lines[1][1].name = "ساقية مكى";
        lines[1][1].number = 37;
        lines[1][2].name = "ضواحى الجيزة";
        lines[1][2].number = 38;
        lines[1][3].name = "محطة الجيزة";
        lines[1][3].number = 39;
        lines[1][4].name = "فيصل";
        lines[1][4].number = 40;
        lines[1][5].name = "جامعة القاهرة";
        lines[1][5].number = 41;
第3排


您很好地初始化了数组,但没有初始化数组中的任何对象

做:


PS:我想你的意思是
不是
对吧?

我想可能有点混乱。我试图抓住我认为你的意思。您需要一个线阵列,并且在该阵列中,每条线都包含一个桩号阵列。每个站都有一个名字和号码。基于这种理解,下面是一些可以工作的代码,并给出了其余部分应该如何构造的想法

    internal class Station
    {
        internal string name;
        internal int stationNumber;
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        Station[][] line = new Station[3][]; // Assuming 3 lines total

        line[0] = new Station[34]; // This is saying line #0 (stored in element major 0) needs 34 elements, each of which will contain a Station instance
        line [0][0] = new Station { "حلوان", 1 };
        line [0][1] = new Station {"عين حلوان", 2};
        line[0][2] = new Station {"جامعة حلوان",3};
        line[0][3] = new Station {"وادى حوف",4};
        line[0][4] = new Station { "حدائق حلوان", 5 };
    }

你能发布实际代码吗。还显示错误所在的行。当您声明一个交错数组时,您首先将所有维度声明为一个新数组,但随后必须迭代(例如)第一个维度,并为该维度中的每个数组声明一个长度为X的新数组。请记住,锯齿数组是数组的数组。因此,您可以“新建”数组,然后“新建”其中的每个数组。哦,但是如果第[0][0].name行引用的是一个名为.name的属性的类或结构,那么您还必须初始化该类或结构。这通常是由构造函数完成的,所以。是的,请多发一点代码,这样我们就可以看到那里发生了什么。事实上,错误发生在我启动程序时,但当我声明名称和编号时,它在开始时给出了NullReferenceException,我现在明白了,我应该先“新建”,然后声明名称和编号,虽然我有一百多行错误代码,但如果有人知道如何快速编辑它们,请告诉我,我的整个团队都在开发这个程序,我正在放慢他们的速度:(Visual Studio有极好的查找和替换功能。甚至正则表达式匹配(我不理解)。但是如果你可以突出显示“line[”在上面的代码块中,用“新行[”替换它可能会起作用。如果没有看到具体的代码,我无法确定。station是我创建的一个类,包含一个名为name的字符串和一个名为number的值,它的名称都是小写字母。:)@GamerGamesGames不知道C#允许类名以小写字母开头。无论如何,你的类应该以大写字母开头。@MihaiBratulescu允许。但它确实不典型。我希望这是有意义的。在看不到整个程序的情况下,很难知道你需要什么,但我希望这能让你知道你需要做什么为了防止出现您刚才遇到的错误。确切地说:),我之所以使用锯齿数组,是因为每行中有不同数量的站,尽管有相同但位于两个不同行中的站,对于那些我刚刚创建的站,例如:
line[1][6]=helwan/(已声明的对象)
Hmm,这很奇怪。我在VS2013中编写了代码,但当我复制/粘贴到这里时,它移动了引号。可能是软件在从右到左的字母表上遇到了问题。无论如何,我相信你知道我想发布的内容,引号围绕字符串,而不是像这里那样围绕数字。是的,但它将是EX:
line[0][0]=new Station{name=“Station name”,number=(value)}
:)因为只有一个数字会给出一个错误:)是的,有点。尽管在括号内,您按照值在类定义中出现的顺序给出值,但不需要提供“name=(value)}。您可以,但不必这样做。
lines[0][0] = new Station() { name = "...", number = 1 };
    internal class Station
    {
        internal string name;
        internal int stationNumber;
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        Station[][] line = new Station[3][]; // Assuming 3 lines total

        line[0] = new Station[34]; // This is saying line #0 (stored in element major 0) needs 34 elements, each of which will contain a Station instance
        line [0][0] = new Station { "حلوان", 1 };
        line [0][1] = new Station {"عين حلوان", 2};
        line[0][2] = new Station {"جامعة حلوان",3};
        line[0][3] = new Station {"وادى حوف",4};
        line[0][4] = new Station { "حدائق حلوان", 5 };
    }