У меня есть класс со свойством, представляющим собой список enum
значений, которые должны быть заполнены во время выполнения (я использую список вместо массива, потому что я заранее не знаю, сколько будет элементов).
Я объявил свойство следующим образом:
public class Entity
{
// ...
public List<FooEnum> FooList { get; set; }
// ...
}
, где FooEnum
имеет следующую структуру:
public enum FooEnum
{
[Description( "Foo: " )]
Foo = 1,
[Description( "Boo: " )]
Boo = 3,
[Description( "Loo: " )]
Loo,
//...
}
Чтобы добавить элементы в список, я добавил следующее метод класса Entity:
public void SetFoos( string packet )
{
VectorSize = short.Parse( ExtractValue( packet, "ListSize: " ) );
for( int i = 0, start = packetIndexOf( "ListSize" ); i < VectorSize; i++ )
{
string reducedPacket = packet.Substring( start );
string currentFoo = ExtractValue( packet, "--------------\r\n" );
foreach( FooEnum foo in FooEnum.GetValues( typeof( FooEnum ) ) )
{
if( foo.Description().StartsWith( currentFoo ) ) { FooList.Add(foo); break; }
}
}
}
Я еще не реализовал логи запуска обновления c, потому что хотел протестировать пример, где VectorSize был 1, но при запуске программы я получил ошибку времени выполнения :
System.NullReferenceException: ссылка на объект не определена для экземпляра объекта
Я попытался объявить список как public List<FooEnum> FooList = new List<FooEnum>();
, но сразу же получил предупреждение о том, что
Поле "Entity.FooList" никогда не атрибутируется и всегда будет иметь нулевое значение по умолчанию
, поэтому я вернулся к использованию геттера и сеттера.
Я попытался найти несколько примеров свойств List в C# и на их основе я попытался изменить свое объявление на
public class Entity
{
// ...
private List<FooEnum> fooList;
public List<FooEnum> FooList
{
get { return fooList; }
set { fooList = value; }
}
// ...
}
, но получил ту же ошибку времени выполнения.
Чего мне не хватает? Разве нельзя использовать список Enums в качестве свойства класса?