Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# for/foreach循环中的NullReferenceExceptions_C#_Xna - Fatal编程技术网

C# for/foreach循环中的NullReferenceExceptions

C# for/foreach循环中的NullReferenceExceptions,c#,xna,C#,Xna,我正在制作一个小游戏,我遇到了一个问题,从.txt文件中读取关卡地图,将其转换为二维字符数组,然后将任何非空白字符转换为某种类型的对象。我认为转换为2D数组是可以的,但在转换为对象时,遍历数组的两个循环中有一个出现空引用异常。代码如下: public void buildLevel() { List<Tangible> objects = new List<Tangible>(0); for (int i = 0; i < map.GetLength

我正在制作一个小游戏,我遇到了一个问题,从.txt文件中读取关卡地图,将其转换为二维字符数组,然后将任何非空白字符转换为某种类型的对象。我认为转换为2D数组是可以的,但在转换为对象时,遍历数组的两个循环中有一个出现空引用异常。代码如下:

public void buildLevel()
{
    List<Tangible> objects = new List<Tangible>(0);
    for (int i = 0; i < map.GetLength(1); i++)
    {
        for (int j = 0; j < map.GetLength(0); j++)
        {
            if (map[j, i] == 'O')
            {
                objects.Add(new Ball((50 * j), (50 * i)));
            }
            if (map[j, i] == 'X')
            {
                objects.Add(new Block((50 * j), (50 * i), 50, 50));
            }
        }
    } 
    allObjects = objects;
}
public void buildLevel()
{
列表对象=新列表(0);
for(int i=0;i
知道这里会发生什么吗?我真的很感激

编辑:以下是将文件读入二维数组的代码:

public void setMap(String mapFile)
    {
        try
        {
            List<String> lines = new List<String>();
            using (StreamReader sr = new StreamReader("maps\\testLevel.txt"))
            {
                String currentLine;
                while ((currentLine = sr.ReadLine()) != null)
                {
                    lines.Add(currentLine);
                }
            }
            map = new char[lines[0].Length, lines.Count];
            for (int i = 0; i < lines.Count; i++)
            {
                for (int j = 0; j < lines[0].Length; j++)
                {
                    map[j, i] = lines[i][j];
                }
            }
        }
        catch (DirectoryNotFoundException e)
        {
            Console.Error.WriteLine(e);
        }
    }
public void setMap(字符串映射文件)
{
尝试
{
列表行=新列表();
使用(StreamReader sr=newstreamreader(“maps\\testLevel.txt”))
{
串电流线;
而((currentLine=sr.ReadLine())!=null)
{
行。添加(当前行);
}
}
map=newchar[lines[0]。长度,lines.Count];
对于(int i=0;i
调试器把你放在哪一行?@Loren它把我放在
for(int i=0;i
你的
map
对象初始化了吗?@bytebuster既然你提到了它,我想这可能就是问题所在。调用一个单独的方法来读取文件并将其转换为映射数组,这可能是因为文件的try/catch中没有读取该文件。我认为我不能把它放在这里,但是我会把它添加到原来的文章中作为编辑。你可以考虑使用<代码>文件。这将节省几行代码。