NullReferenceException未处理未将对象引用设置为对象的实例。 C#

时间:2013-05-02 12:15:49

标签: c# nullpointerexception

我尝试运行我的程序,并且还将我的代码与我朋友的代码进行了比较,但即使我们尝试更改这些行(我认为错误来自哪里),错误也会一直显示出来:

try
{
    FileStream b = new FileStream(@"C:\User\User_2\Desktop\board.txt", FileMode.Open);
    StreamReader stream = new StreamReader(b);

    int x = 0;
    while (!stream.EndOfStream)
    {
        if (x == 0)
            g1 = stream.ReadLine().Split(' ');
        else if (x == 1)
            g2 = stream.ReadLine().Split(' ');
        else if (x == 2)
            g3 = stream.ReadLine().Split(' ');

        x++;
    }
    stream.Close();
    b.Close();
}
catch (Exception e) { }

该程序用于检查包含以下3行的文本文件:

O . X 
X O .
X . O

......看看是否有胜利者。

这是Visual Studio突出显示错误的部分:

int n = 0;
int m = n + 1;
int o = m + 1;

Boolean result = false;
int winner = 0;
string dw = "";

while (n <= 2)
{
    // In this if-statement is the error:
    if (g1[n].Equals(g2[n]) && g2[n].Equals(g3[n]) && !g1[n].Equals("."))
    {
        result = true;
        winner++;
        dw = g1[n];
    }
    if (g1[n].Equals(g1[m]) && g1[m].Equals(g1[o]) && !g1[n].Equals("."))
    {
        result = true;
        winner++;
        dw = g1[n];
    }
    else if (g2[n].Equals(g2[m]) && g2[m].Equals(g2[o]) && !g2[n].Equals("."))
    {
        result = true;
        winner++;
        dw = g2[n];
    }
    else if (g3[n].Equals(g3[m]) && g3[m].Equals(g3[o]) && !g3[n].Equals("."))
    {
        result = true;
        winner++;
        dw = g3[n];
    }
    else if (g1[n].Equals(g2[m]) && g2[m].Equals(g3[o]) && !g1[n].Equals("."))
    {
        result = true;
        winner++;
        dw = g1[n];
    }
    else if (g3[n].Equals(g2[m]) && g2[m].Equals(g1[o]) && !g3[n].Equals("."))
    {
        result = true;
        winner++;
        dw = g3[n];
    }
    n++;
}

我真的不知道该怎么做,我无法让它发挥作用。

编辑:我尝试在if语句之前打印出数组的值,但它不打印任何内容。对不起,伙计们,我真的很新。

3 个答案:

答案 0 :(得分:1)

首先,尝试读取这样的文件:

using System.IO;

try
{
    var file = @"C:\User\User_2\Desktop\board.txt";
    var lines = File.ReadAllLines(file).ToList();
    var g1 = lines[0].Split(' ');
    var g2 = lines[1].Split(' ');
    var g3 = lines[2].Split(' ');
}
catch (Exception e) 
{ 
    throw e; 
}

现在可能会抛出异常。

catch (Exception e) { }是没有被通知存在异常的罪魁祸首。您应该始终处理代码中捕获的异常。

P.S。可能您必须在路径中使用C:\Users\...,而不是C:\User\...。无论如何,请确保使用文件的有效路径。

答案 1 :(得分:0)

使用Equals时,必须确保您调用的对象不为空;

object oneValue = 1;
object nullValue = null;

var result = nullValue.Equals(oneValue); // Throws NullReferenceException because nullValue is null

您可以使用等号运算符。

string oneValue = "1";
string nullValue = null;

var result = nullValue == oneValue; // False

答案 2 :(得分:0)

您可以使用==运算符代替Equals方法,该方法需要实例化对象。但是你仍然需要确保该值不为空。