Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.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
NullReferenceException未经处理,对象引用未设置为对象的实例。c#_C#_Nullpointerexception - Fatal编程技术网

NullReferenceException未经处理,对象引用未设置为对象的实例。c#

NullReferenceException未经处理,对象引用未设置为对象的实例。c#,c#,nullpointerexception,C#,Nullpointerexception,我试着运行我的程序,并将我的代码与我朋友的代码进行了比较,但即使我们尝试更改这些行(我认为错误来自于这些行),错误仍会不断出现: 该程序用于检查包含以下三行的文本文件: O . X X O . X . O 哦。X xo。 X。O …看看是否有赢家 这是Visual Studio突出显示错误的部分: int n = 0; int m = n + 1; int o = m + 1; Boolean result = false; int winner = 0; string dw = "";

我试着运行我的程序,并将我的代码与我朋友的代码进行了比较,但即使我们尝试更改这些行(我认为错误来自于这些行),错误仍会不断出现:

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

O . X X O . X . O 哦。X xo。 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++;
}
int n=0;
int m=n+1;
int o=m+1;
布尔结果=假;
int=0;
字符串dw=“”;

(n首先,尝试如下方式读取文件:

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\…
。无论如何,请确保使用文件的有效路径。

使用
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

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

如果输入文件中只有两行,会发生什么情况?g1/g2/g3到底是什么?它们定义在哪里?@Rahul我想,错误在标题中Visual Studio将哪些变量标记为空?为什么人们会否决这样的问题?他显然是新来的,而且他似乎在努力解决他的问题g1、g2和g3在哪里初始化?它们似乎在您发布的代码中不知从何处出现。DirectoryNotFoundException无法找到路径“C”的一部分:\User\User\u 2\Desktop\board.txt.出现。并且您绝对确定应用程序运行时计算机上存在文件:C:\User\User\u 2\Desktop\board.txt?我现在才意识到,是的,路径有问题。它在我的电脑上工作,但在我在学校使用的电脑上没有。谢谢!问题是,该文件没有被删除我认为,如果读取正确,那么这些行就不会存储在数组中。
string oneValue = "1";
string nullValue = null;

var result = nullValue == oneValue; // False