Инициализация свойства списка - PullRequest
1 голос
/ 10 мая 2019

Я пишу программу для процесса SSIS, и часть того, что он делает, читает строки из потока данных и упаковывает их в список строковых массивов List<string[]>.Мой основной класс содержит обновленный список, но у меня есть класс EmailBuilder, которому требуется доступ к полю обновленного списка, чтобы написать сообщение электронной почты в формате HTML.Прямо сейчас мой код выглядит следующим образом:

Поля

public static List<string[]> Updated = new List<string[]>();

ProcessInputRow

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    if (Row.Missing_IsNull)
    {
        Updated.Add(new string[] { Row.Name, Row.PreviousOutstanding.ToString(), Row.PreviousDate.ToString(), Row.CurrentOutstanding.ToString(), Row.CurrentDate.ToString()});
    }
    else
    {
        Missing.Add(Row.Missing);
    }
}

Конечно, проблема в том, что мое поле public, который является нет-нет.Я попытался использовать встроенные свойства:

public static List<string[]> Updated { get; private set; }

Но это возвращает нулевое исключение, я полагаю, потому что на тот момент я фактически не создал список.Итак, как я могу безопасно реализовать этот код?Я не могу манипулировать им так, чтобы я мог получить доступ к полю за пределами класса, не делая его публичным.Любой вклад приветствуется.

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Если я правильно понимаю, вы хотите оставить поле закрытым, но вносить в него изменения вне класса. Можно ли использовать публичный метод, который делает это? Или собственность?

Как

MainClass
{
  ...
  otherClass.AddToPrivateList("content")
}
0 голосов
/ 10 мая 2019

Лучше скрыть свои поля, даже если это не существенно. Вы можете инициализировать автоматические свойства следующим образом, если вы используете C # 6 или новее.

public static List<string[]> Updated { get; private set; } = new List<string[]>();
public static List<TheOtherType> Missing { get; private set; } = new List<TheOtherType>();
...