0

我有一个类,其属性是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; }
        }
    }
}

我还没有实现启动更新逻辑,因为我想测试一个 VectorSize 为 1 的示例,但是在运行程序时出现运行时错误:

System.NullReferenceException:对象实例的对象引用未定义

我试图将列表声明为public List<FooEnum> FooList = new List<FooEnum>();,但立即收到警告,告诉我

字段“Entity.FooList”永远不会被归属,并且总是有一个默认的空值

所以我又开始使用 getter 和 setter。

我试图在 C# 中找到一些 List 属性的示例,并基于它们我尝试将我的声明更改为

public class Entity 
{
    // ...
    private List<FooEnum> fooList;
    public List<FooEnum> FooList 
    {
        get { return fooList; } 
        set { fooList = value; } 
    }
    // ... 
}

但我得到了相同的运行时错误。

我错过了什么?不能将枚举列表用作类属性吗?

4

2 回答 2

3

将构造函数添加到您的Entity类并初始化FooListfoolist如下所示

public class Entity 
{
    public List<FooEnum> FooList { get; set; }

    // ctor 
    public Entity()
    {
        FooList = new List<FooEnum>();
    }
}
于 2020-01-22T20:49:09.133 回答
1

您需要在添加 foo 之前初始化 fooList,如下行:

    fooList = new List<FooEnum>();
于 2020-01-22T20:46:06.190 回答