2010-05-30 103 views
12

我有枚舉:如何添加枚舉值列出

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

,我想創建此枚舉

public List<SymbolWejsciowy> symbol; 

,但在我的方式列表中添加枚舉列表:
1.

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

2.
symbol.Add(SymbolWejsciowy.K1);

我總是異常

對象引用不設置到對象的實例。

我該怎麼辦錯了:/請幫助:)

回答

15

至於其他的答案已經指出,問題是,你已經聲明瞭一個列表,但你有沒有建立一個讓你獲得一個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(); 
+0

我從來沒有意識到,我這樣做的錯誤!是的,我不初始化名單...謝謝! – netmajor 2010-05-30 23:45:42

3

在你選擇1 SymbolWejsciowy實例和列表具有相同的名稱,我想這是一個錯字錯誤。

沒有考慮到這一點我會說你沒有創建的列表

symbol = new List<SymbolWejsciowy>(); 
2

你的代碼永遠不會初始化列表的實例。試試這個:

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

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

肯定會很好,如果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。)