2016-05-04 3 views
-1

У меня та же проблема, что и IList<int> throws Null Reference Exception when adding values, и решение инициализирует поле списка в конструкторе с помощью «new List();», но в моей программе у меня есть структура, нет класса. Что я могу сделать с C#, если структуры в C# без параметров?Инициализировать поле списка в структуре

public struct ListStruct<T> : IEnumerable<T>, IList<T> 
{ 
    private List<T> value; 

    //public ListStruct() 
    //{ 
    // this.value = new List<T>(); 
    //} 

    // ... 

    public void Add(T item) 
    { 
     ((IList<T>)value).Add(item); // Execution time: NullReferenceException was unhandled 
    } 
} 
+8

Обтекание '' 'внутри' структуры' кажется мне плохой идеей. Зачем ты это делаешь? FYI ссылкой является «Список ' внутри вашей 'struct'. Вы должны инициализировать его 'private List value = new Список ();'. – juharr

+2

Зачем комментировать конструктор? У вас уже есть код для решения проблемы. (Ну, почти. Вам нужно определить параметры для конструктора. Этот вид восходит к комментарию выше, пытаясь понять, что эта структура на самом деле предназначена для * be *.) – David

+0

Это не дубликат, как указано врачом и Дэвид. Проблема заключается в том, что структура не может иметь конструктор по умолчанию, поэтому нет возможности инициализировать его элемент, хранящийся по ссылке, если вы не предоставите конструктор с параметром (https://msdn.microsoft.com/en-us/library/aa288208 (v = vs.71) .aspx) или отказаться от своей идеи, чтобы она была «struct» – zmechanic

ответ

0

Если вы действительно нуждались в этом, вы могли бы тест Add() метод для недействительности и назначить новый список, если это необходимо.

Трудно понять, зачем вам это нужно. Это не семантически тип значения, поэтому это не то, что обычно должно быть struct, и не имеет смысла злоупотреблять им по соображениям производительности, а затем пройти через более запутанный путь, чем вы могли бы в противном случае.

Смежные вопросы