Списки будут показывать ноль, даже если они назначены в конструкторе - PullRequest
0 голосов
/ 09 мая 2019
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);
       }
}

Это пример того, с чем у меня проблемы. Я инициирую, скажем, два списка в конструкторе. Если я сразу проверю исключение нулевой ссылки в конструкторе, все в порядке. Но когда другой метод вызывает списки, он генерирует исключение нулевой ссылки. Они оба являются переменными-членами, поэтому я не совсем понимаю, почему это произойдет Спасибо за ваше время.

Ответы [ 2 ]

3 голосов
/ 09 мая 2019

В конструкторе вы не присваиваете поля своего класса, вы создаете новые локальные переменные и инициализируете их.

Вы должны удалить 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};
2 голосов
/ 09 мая 2019

Вы создаете новые списки в конструкторе

Измените конструктор на это:

    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 #, чтобы полностью понять вашу проблему: -)

...