0

Всем привет, совсем недавно начал программировать. У меня есть список Signals, в котором хранятся signal, внутри каждого signal должен быть список параметров и у каждого параметра должны быть значения, значения желательно тоже в списке.

На данном этапе я пытаюсь добавить параметры в существующий signal, но при попытке добавления вызывается ошибка:

System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."

Как её можно исправить, не совсем понятно

class Program
{
    static void Main(string[] args)
    {
        //Список с Сигналами
        List<Signal> Signals = new List<Signal>();

        //Добавляем новый сигнал
        Signals.Add(new Signal()  {VarName = "signal1"});

        //Просматриваем все сигналы в Signals
        foreach (var signal in Signals)
        {
            //Добавляем в сигнал параметр Time и значение
            signal.parameters.Add(new Parameters() { paramName = "Time", value = 1});
            foreach (var parameter in signal.parameters)
            {
                Console.WriteLine(parameter.paramName, ":", parameter.value);
            }
        }
        Console.Read();
    }
}

public class  Parameters
{
    public string paramName { get; set; }
    public int value { get; set; }
}

public class Signal
{
    public string VarName { get; set; }
    public List<Parameters> parameters;

}

Ошибка в этой строке:

signal.parameters.Add(new Parameters() { paramName = "Time", value = 1});

2 Answers2

0
public class Signal
{
    public string VarName { get; set; }
    public List<Parameters> parameters = new List<Parameters>();
}
tym32167
  • 32,857
  • зачем этот костыль? зачем создавать то, что никогда не будет использоваться(возможно) – pasha goroshko Apr 11 '19 at 09:36
  • @pashagoroshko у вас своеобразное определение костыля. Если поле не используется, то его нет смысла создавать, это да. В смысла всё поле нет смысла определять, если оно не используется – tym32167 Apr 11 '19 at 09:40
  • @pashagoroshko, а как обычно это реализуется? – Чирков Илья Apr 11 '19 at 09:40
  • @ЧирковИлья поля обычно инициализируются либо на месте, как показал я выше, либо в конструкторе, либо указываются при создании экземпляра – tym32167 Apr 11 '19 at 09:42
  • @ЧирковИлья ответил – pasha goroshko Apr 11 '19 at 09:43
  • @tym32167 а если у меня там null, то при маппинге будет что происходить? а ну да, вначале создадим пустую коллекцию, а потом присвоим null :) гениально – pasha goroshko Apr 11 '19 at 09:45
  • @tym32167 либо через конструктор в моделях, или правильнее делать на уровне логике все манипуляции с моделями – pasha goroshko Apr 11 '19 at 09:46
  • @pashagoroshko вы сами придумываете кейсы, которых нет в вопросе? В вашем воображаемом коде ваш вариант конечно лучше :) – tym32167 Apr 11 '19 at 09:47
0

Поправьте так:

    //Добавляем новый сигнал
    Signals = new List<Signal> 
    {
       new Signal 
       { 
          VarName = "signal1",
          parameters = new List<Parameters>()
       }
    };
pasha goroshko
  • 483
  • 3
  • 8