列表将显示 null,即使在构造函数中分配也是如此

Lists will show null even though assigned in constructor

提问人:Dogukan Levendoglu 提问时间:5/9/2019 更新时间:5/9/2019 访问量:82

问:

public class Aitken 
{
private readonly List<double> X;
private readonly List<double> Y;

        public Aitken()
        {
            List<double> X = new List<double>() { 0, 0.5, 0.75, 1.0 };
            List<double> Y = new List<double>() { 1.0, 0.6065, 0.4724, 0.3679};
        }

      public void Print()
       { 
          Console.WriteLine(X == null);
          Console.WriteLine(Y == null);
       }
}

这是我遇到问题的例子。我启动,比如说构造函数中的两个列表。如果我立即检查构造函数中的空引用异常,一切都很好。但是,当另一个方法调用列表时,它会引发 null 引用异常。它们都是成员变量,所以我不太明白为什么会发生这种情况。感谢您抽出宝贵时间接受采访。

C# 列表 NullReferenceException

评论

0赞 DK. 5/9/2019
从构造函数中删除部分。这样,您就可以在那里定义局部变量,而不是将值分配给同名的实例字段。List<double>XY
0赞 Dour High Arch 5/9/2019
在调试器中运行代码。看看和看.this.XAitken.X

答:

3赞 Simply Ged 5/9/2019 #1

您正在构造函数中创建新列表

将构造函数更改为:

    public Aitken()
    {
        X = new List<double>() { 0, 0.5, 0.75, 1.0 };
        Y = new List<double>() { 1.0, 0.6065, 0.4724, 0.3679};
    }

这会将列表分配给成员变量。

我建议您阅读 C# 中的变量范围以充分理解您的问题:-)

4赞 Selman Genç 5/9/2019 #2

在构造函数中,您不是在分配给类的字段,而是在创建新的局部变量并初始化它们。

您应该删除并执行以下操作:List<double>

X = new List<double>() { 0, 0.5, 0.75, 1.0 };
Y = new List<double>() { 1.0, 0.6065, 0.4724, 0.3679};