如何在方法中返回 int[,]

本文关键字:int 返回 方法 | 更新日期: 2023-09-27 18:33:11

我正在使用C# XNA创建一个游戏。
我有一个存储在int[,]数组中的 TileMap,如下所示:

    int[,] Map = 
    {
        {1, 1, 1, 1, 1, 1, 1, 1 },
        {1, 1, 1, 1, 1, 1, 1, 1 },
        {1, 1, 1, 1, 1, 1, 1, 1 },
    };

我很好奇如何接受我的类构造函数甚至在方法中Map[,]这种类型的数组(如果可能的话)并返回数组?

我想像这样返回一个int[,]

    public int[,] GetMap()
    {
        return 
    int[,] Map1 = 
    {
        {1, 1, 1, 1, 1, 1, 1, 1 },
        {1, 1, 1, 1, 1, 1, 1, 1 },
        {1, 1, 1, 1, 1, 1, 1, 1 },
    };;
    }

如何在方法中返回 int[,]

我想你想要这个:

public int[,] GetMap()
{
    return new [,] 
    {
      {1, 1, 1, 1, 1, 1, 1, 1 },
      {1, 1, 1, 1, 1, 1, 1, 1 },
      {1, 1, 1, 1, 1, 1, 1, 1 },
    };
}

也可以是:

public int[,] GetMap()
{
    int [,] map = new [,]
    {
      {1, 1, 1, 1, 1, 1, 1, 1 },
      {1, 1, 1, 1, 1, 1, 1, 1 },
      {1, 1, 1, 1, 1, 1, 1, 1 },
    };
    return map;
}
void Method(int[,] map)
{
    // use map here
}
int[,] MethodWithReturn()
{
    // create Map here
    return Map;
}
public int[,] GetMap()
{
    int[,] map = new int[,]
    {
        {1, 1, 1, 1, 1, 1, 1, 1 },
        {1, 1, 1, 1, 1, 1, 1, 1 },
        {1, 1, 1, 1, 1, 1, 1, 1 },
    };
    return map;
}

不能对多维数组使用隐式声明,因此需要先声明数组,然后再返回它。

你确实可以做到:

return new int[,]
           {
               {1, 1, 1, 1, 1, 1, 1, 1},
               {1, 1, 1, 1, 1, 1, 1, 1},
               {1, 1, 1, 1, 1, 1, 1, 1}
           };

但是,如果你问你将如何处理外部的int[,],当你不知道边界时......然后:

private static int[,] CreateMap(out int height)
{
    height = 3;
    return new int[,]
               {
                   {1, 1, 1, 1, 1, 1, 1, 1},
                   {1, 1, 1, 1, 1, 1, 1, 1},
                   {1, 1, 1, 1, 1, 1, 1, 1}
               };
}

外部用法:

int height;
int[,] map = CreateMap(out height);
int width = map.Length / height;
for (int i = 0; i < height; i++)
{
    for (int j = 0; j < width; j++)
    {
        Console.WriteLine(map[i, j]);
    }
}