1

我需要读取一个结构如下的文件:

01000
00030
00500
03000
00020

并将其放入这样的数组中:

int[,] iMap = new int[iMapHeight, iMapWidth] {
{0, 1, 0, 0, 0},
{0, 0, 0, 3, 0},
{0, 0, 5, 0, 0},
{0, 3, 0, 0, 0},
{0, 0, 0, 2, 0},
};

希望你能看到我在这里尝试做的事情。我很困惑如何做到这一点,所以我在这里问了 SO,但是我从中得到的代码得到了这个错误:

你调用的对象是空的。

我对此很陌生,所以我知道如何解决它......我只知道代码:

protected void ReadMap(string mapPath)
{
    using (var reader = new StreamReader(mapPath))
    {
        for (int i = 0; i < iMapHeight; i++)
        {
            string line = reader.ReadLine();
            for (int j = 0; j < iMapWidth; j++)
            {
                iMap[i, j] = (int)(line[j] - '0');
            }
        }
    }
}

我得到错误的那一行是:

iMap[i, j] = (int)(line[j] - '0');

任何人都可以提供解决方案吗?

4

1 回答 1

2

在这一行上,StreamReader.ReadLine如果到达文件末尾,则可以返回 null:

string line = reader.ReadLine();

您应该检查这种情况并适当地处理它。

string line = reader.ReadLine();
if (line == null)
{
    // Handle the error.
}

还要确保您的输入至少有iMapHeight * iMapWidth行。

您还应该确保您的数组已初始化。例如,将此行添加到方法的开头:

iMap = new int[iMapHeight, iMapWidth];
于 2010-05-08T23:34:26.803 回答