如何将枚举值添加到列表中

时间:2010-05-30 22:46:30

标签: c# list enums

我有以下枚举:

public enum SymbolWejsciowy
{
     K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 
}

我想使用此枚举的值创建一个列表:

 public List<SymbolWejsciowy> symbol;

我尝试了几种不同的方法将枚举值添加到列表中:

SymbolWejsciowy symbol;  
symbol.Add(symbol = SymbolWejsciowy.K1); 

symbol.Add(SymbolWejsciowy.K1); 

但是,我总是得到以下例外:

  

对象引用未设置为对象的实例。

我怎样才能正确地完成这个?

4 个答案:

答案 0 :(得分:17)

正如其他答案已经指出的那样,问题是您已经声明了一个列表,但是您还没有构建一个列表,因此当您尝试添加元素时,您会得到一个NullReferenceException

请注意,如果您想构建一个新列表,可以使用更简洁的collection initializer syntax

List<SymbolWejsciowy> symbols = new List<SymbolWejsciowy> 
{
    SymbolWejsciowy.K1,
    SymbolWejsciowy.K2,
    // ...
};

如果您想要一个包含所有值的列表,那么您可以通过调用Enum.GetValues

来获取该列表
List<SymbolWejsciowy> symbols = Enum.GetValues(typeof(SymbolWejsciowy))
                                    .Cast<SymbolWejsciowy>()
                                    .ToList();

答案 1 :(得分:3)

在您的选项中,1个SymbolWejsciowy实例和您的列表具有相同的名称,我想这是一个拼写错误。

如果不考虑这一点,我会说你没有创建列表实例

symbol = new List<SymbolWejsciowy>();

答案 2 :(得分:2)

您的代码从不初始化列表。试试这个:

public List<SymbolWejsciowy> symbol = new List<SymbolWejsciowy>();
symbol.Add(SymbolWejsciowy.K1);

SymbolWejsciowy mySymbol= SymbolWejsciowy.K2;
symbol.Add(mySymbol);

答案 3 :(得分:0)

如果{C} 2.0中的Enum.GetValues()已更新为泛型,那肯定会很好。好吧,我猜我们必须自己写一下:

static class EnumHelpers<T> where T : struct
{
    public class NotAnEnumException : Exception
    {
        public NotAnEnumException() : base(string.Format(@"Type ""{0}"" is not an Enum type.", typeof(T))) { }
    }

    static EnumHelpers()
    {
        if (typeof(T).BaseType != typeof(Enum)) throw new NotAnEnumException();
    }

    public static IEnumerable<T> GetValues()
    {
        return Enum.GetValues(typeof(T)).Cast<T>();
    }

    public static T Parse(string value)
    {
        return (T)Enum.Parse(typeof(T), value);
    }
}

我添加了Parse(),因为它以同样的方式从泛型中受益。

用法:

        var symbols = EnumHelpers<SymbolWejsciowy>.GetValues().ToList();

        SymbolWejsciowy s = EnumHelpers<SymbolWejsciowy>.Parse("S2");

(ASIDE:我也希望你能为这类事写where T : enum。另外,where T : delegate。)