代码之家  ›  专栏  ›  技术社区  ›  netmajor

如何向列表中添加枚举值

  •  13
  • netmajor  · 技术社区  · 14 年前

    我有以下枚举:

    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 回复  |  直到 6 年前
        1
  •  17
  •   Mark Byers    14 年前

    正如其他答案已经指出的那样,问题是你已经声明了一个列表,但是你还没有构建一个列表,所以你得到了一个 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();
    
        2
  •  3
  •   Claudio Redi    14 年前

    在选项1中,symbolwejsciowy实例和列表具有相同的名称,我认为这是一个打字错误。

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

    symbol = new List<SymbolWejsciowy>();
    
        3
  •  2
  •   msergeant    14 年前

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

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

    SymbolWejsciowy mySymbol= SymbolWejsciowy.K2;
    symbol.Add(mySymbol);
    
        4
  •  0
  •   Jay Bazuzi Buck Hodges    14 年前

    如果 Enum.GetValues() 在C 2.0中更新了仿制药。好吧,我猜我们得自己写:

    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");
    

    (旁白:我也希望你能写信 where T : enum 因为这类事情。也, where T : delegate )