В настоящее время у меня есть структура Match, которая содержит список блоков.
public struct Match{
public List<Block> blocks;
}
Когда я пытаюсь создать новый Match (в этом случае, называемый matchData) и добавить Blocks в свой список Block, мои компиляторы выведут:
Use of unassigned local variable 'matchData'
Я попытался инициализировать список, выполнив следующие действия:
public struct Match{
public List<Block> blocks = new List<Block>();
}
что приводит к следующей ошибке:
Structs cannot have instance field initializers
Итак, как мне инициализировать структуру Match? Должен ли я создавать конструктор?
Из MSDN:
Это также ошибка для инициализации поля экземпляра в теле структуры. Вы можете инициализировать члены структуры только с помощью параметризованного конструктора или путем доступа к членам отдельно после объявления структуры. Любые частные или другие недоступные члены могут быть инициализированы только в конструкторе.
http://msdn.microsoft.com/en-us/library/0taef578.aspx
Таким образом, вы можете инициализировать список в параметризованном конструкторе следующим образом:
public struct Match{
public List<Block> blocks;
public Match(List<Block> blocks)
{
this.blocks = blocks;
}
}
Или установите его снаружи:
Match m = new Match();
m.blocks = new List<Block>();
В качестве побочной заметки вам, вероятно, было бы лучше использовать класс вместо структуры. Вы используете dosent, похоже, соответствуют типичному прецеденту, как указано здесь: http://msdn.microsoft.com/en-us/library/ah19swz4.aspx
Вы получали "Использование непризнанной локальной переменной matchData", потому что вы не вызывали new Match()
:
Match matchData;
matchData.blocks = new List<Block>(); // error!
Но:
Match matchData = new Match();
matchData.blocks = new List<Block>(); // fine!
Структуры имеют неявный конструктор без параметров, который инициализирует все поля значениями по умолчанию.
Тем не менее: вы должны использовать class
вместо struct
, если не понимать, как именно работают структуры в С#. Не просто используйте struct, потому что он "легче", чем класс.
В частности, ваша Block
структура изменчива, что приводит к плохому времени.