C# - 字符串数组的二维数组

3

我正在尝试为基于控制台的游戏创建世界地图。

在World类中,我有字符串数组,可以使用级别打印方法进行打印。

public static string[] A1 = new string[]
{
    (" level data"),
    (" level data"),
};

如果我这样做,它就有效

Render.DrawLevel(World.A1);

Render.DrawLevel需要以下参数:

(string[] _level)

然而,在世界级别中,我希望创建一个能够容纳所有地图的字符串数组的二维数组。

我尝试过:

public static string[,][] Map = new string[,][]
{
    { A1 , A2 },
    { B1 , B2 },
};

但是如果我尝试使用以下代码:
World.Map[0,0]

当我打印级别参数时,出现了错误,它显示为 NULL,而不是字符串数组 A1。

我应该如何创建一个二维数组,并正确引用其中的 string[] 参数?

非常感谢。

Fin。

编辑:代码被错误地复制为 'static void' 而不仅仅是 'static'。


你正在创建一个二维数组的“数组”。也就是说,你数组中的每个元素本身都是一个数组。数组是一种引用类型,因此其默认值为 null。想象一下当你创建一个字符串数组时会发生什么; 数组的元素将是 null,直到你给它们赋值,那么在你的情况下也基本相同。你需要初始化 Map[,] 的每个元素,因为它们不会自动引用空数组,正如你所期望的那样。 - InBetween
谢谢,我犯了一个初学者的错误,就是在引用变量后再去赋值,但仍然期望它们有被赋的值。这是问题的原因。 - Fin Warman
3个回答

2

将数组 A1、A2、B1、B2 的初始化放在 Map 初始化之后。在Map 初始化期间,它们的值均为 null。

语法完全正确。

这段代码可以正常工作:

    public static string[] A1 = new string[]
        {
            (" level data 1"),
            (" level data 2"),
        };

    public static string[] A2 = new string[]
        {
            (" level data 1"),
            (" level data 2"),
        };

    public static string[] B1 = new string[]
        {
            (" level data 1"),
            (" level data 2"),
        };

    public static string[] B2 = new string[]
        {
            (" level data 1"),
            (" level data 2"),
        };

    public static string[,][] Map = new string[,][]
    {
        { A1, A2 },
        { B1, B2 },
    };

谢谢!我感到有点傻,没有注意到错误的初始化顺序,我太习惯自由排序的类定义了,以至于忘记了它不能与变量赋值一起使用。你为我节省了很多困惑。 - Fin Warman

1
一个二维数组本质上是由相同大小的数组组成的数组。你可以将其视为一个矩阵,每一列(或行,不太重要)都是一个单独的数组。因此,第一行(列)中的元素将是每个数组的第一个元素。你正在尝试创建一个由数组组成的二维数组。 this上的最佳答案是关于你的问题的很好的阅读材料。

我已经阅读和反复阅读了几次。这对我理解多维数组非常有帮助。我无法弄清楚不能引用数组项的问题出在哪里。 - Fin Warman
问题不在于数组语法,而在于变量声明。我希望其他人也会发现你的链接有帮助。谢谢。 - Fin Warman
1
对不起 - 我误解了你的代码,认为A1 A2 B1和B2是字符串。 - Peter Tsrunchev

0

您的Map签名不正确,它不能是void和多维字符串数组。请将其更改为:

    public static string[,][] Map = new string[,][]
        {
            {A1,A2 },
            {B1,B2 },
        };

谢谢,但这只是一个代码复制错误,不是我实际遇到的问题。我现在已经进行了编辑。 - Fin Warman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接