调用方法时的 C# 运行时 NullReferenceException [duplicate]

C# run-time NullReferenceException when calling method [duplicate]

提问人:Satyam Bendapudi 提问时间:10/20/2020 更新时间:10/20/2020 访问量:69

问:

这里的 C# 新手(多年来更多的 C++)正在为一个简单的问题而苦苦挣扎,但无法诊断。

类定义:

public class myClass{
String prop1, prop2,... propn;
public void setValues(String input){
prop1 = input.Substring(1,5);
prop2 = input.Substring(6,10);
...
propn = input.Substring((n-1)*5+1,n*5));
}
public getProp1() {return prop1;}
public getProp2() {return prop2;}
...
public getPropn() {return propn;}
}

程序中

    myClass[] Entries = new myClass[50];
    int i=0;
    String Line
    while(i<=49){
    Line = inputFile.ReadLine(); //<--System.NullReferenceException thrown here at run-time
    Entries[i++].setValues(Line);
    }

如果能找出这个运行时异常,我们将不胜感激。我正在使用 Visual Studio 2019,这是一个控制台应用程序......如果这是相关的。

提前致谢!

C# NullReferenceException

评论

1赞 Satyam Bendapudi 10/20/2020
异常实际上在下面的行,即 Entries[i++].setValues(Line);
0赞 Sten Petrov 10/20/2020
你的定义在哪里?inputFile
0赞 Satyam Bendapudi 10/20/2020
谢谢AStopher。这有助于弄清楚类本身显然是空的,即使我有一个初始化所有属性的构造函数。[也许是对原始帖子的扩展,但是......]构造函数不应该在创建类数组时执行,并且类的每个实例都应初始化吗?
0赞 Satyam Bendapudi 10/20/2020
嗨,斯滕。输入文件是在我的代码前面使用 StreamReader 定义的。我可以确认它正在打开并且“线”值在手表中显示正确。

答:

0赞 Guru Stron 10/20/2020 #1

这一行:

 myClass[] Entries = new myClass[50];

创建一个用 的值填充 's 的数组。因此,将返回导致问题中的错误。您可以使用以下命令创建您类型的对象,如下所示:nullEntries[i++]nullnew

while(i<=49)
{
    Line = inputFile.ReadLine(); 
    var instance  = new myClass();
    instance.setValues(Line); 
    Entries[i++] = instance ;
}