Почему строка имеет значение Null

306
26 января 2017, 00:47

Есть некий класс с конструктором

public class Neuron
{
    public string name { get; set; }
    public string rusname { get; set; }
    public float[,] weight { get; set; }
    public float sum {get;set;}
    public Neuron(string name,string rusname)
    {
        this.name = name;
        this.rusname = rusname;
        weight = new float[7, 7];
        sum = 0;
    }
}

В другом классе я создаю объекты

neurons[0] = new Neuron("Zero", "Ноль");
neurons[1] = new Neuron("One", "Один");
neurons[2] = new Neuron("Two", "Два");
neurons[3] = new Neuron("Three", "Три");
neurons[4] = new Neuron("Four", "Четыре");
neurons[5] = new Neuron("Five", "Пять");
neurons[6] = new Neuron("Six", "Шесть");
neurons[7] = new Neuron("Seven", "Семь");
neurons[8] = new Neuron("Eight", "Восемь");
neurons[9] = new Neuron("Nine","Девять");

В конце работы программы я пытаюсь вывести имена объекта

string str = neurons[9].name;
string str1 = neurons[9].rusname;

При этом первая строка имеет значение и проблем с выводом нет, а значение второй - null. По какой причине?

Метод вывода имен:

public void screen_info()
{
    terminal.Clear();
    for(int i = 0; i < neurons.Length; i++)
    {
        terminal.Text += neurons[i].name + ": " + neurons[i].sum + Environment.NewLine+Environment.NewLine;
    }
    string str = neurons[9].name;
    string str1 = neurons[9].rusname;
    terminal.Text += str + "  " + str1;
}

Нашёл участок кода, после которого значение второго имени становится null

 if (File.Exists("weights.txt"))
        {
            using(FileStream file = new FileStream("weights.txt", FileMode.Open))
            {
                neurons = (Neuron[]) upload_saves.Deserialize(file);
            }
        }
Answer 1
public string name { get; set; }
public string rusname { get; set; }
public float[,] weight { get; set; }
public float sum {get;set;}

Чтобы значение не менялось нигде кроме конструктора, надо это заменить на

public string name { get; }
public string rusname { get; }
public float[,] weight { get; }
public float sum { get; }
public Neuron(string name,string rusname)
{
    this.name = name;
    this.rusname = rusname;

А здесь надо убедиться, что в имени аргумента нет опечатки. Лучше взять имя свойства и скопипастить его во все 3 места.

READ ALSO
Как вставить картинку в RichTextBox?

Как вставить картинку в RichTextBox?

Вставляются вместо картинки символы

519
Как вывести объекты из класса List

Как вывести объекты из класса List

Имею json такого вида (категории товаров) =

320
Посмотреть иерархию классов в Visual Studio

Посмотреть иерархию классов в Visual Studio

Как в VS можно в удобном виде посмотреть иерархию(Что от какого класса досталось и т п) в удобном виде?

569
Получение объекта по нажатию. Unity

Получение объекта по нажатию. Unity

Нужно получить объект, точнее его значение и id по нажатию на 2d объектСами объекты выводятся в цикле при создании сцены, поэтому GameObject

393