2010-05-30 31 views
12

Tôi có enum:làm thế nào để gia tăng giá trị enum vào danh sách

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

và tôi muốn tạo danh sách các enum này

public List<SymbolWejsciowy> symbol; 

nhưng theo cách của tôi để thêm enum vào danh sách:
1.

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

2.
symbol.Add(SymbolWejsciowy.K1);

Tôi luôn luôn có được ngoại lệ

Object tài liệu tham khảo không được đặt để một thể hiện của một đối tượng.

gì tôi làm sai:/Xin vui lòng giúp :)

Trả lời

15

Như câu trả lời khác đã chỉ ra, vấn đề là bạn đã tuyên bố một danh sách, nhưng bạn chưa được xây dựng một để bạn có được một NullReferenceException khi bạn cố gắng thêm các phần tử.

Lưu ý rằng nếu bạn muốn xây dựng một danh sách mới, bạn có thể sử dụng ngắn gọn hơn collection initializer syntax:

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

Nếu bạn muốn có một danh sách chứa tất cả các giá trị sau đó bạn có thể nhận được rằng bằng cách gọi Enum.GetValues:

List<SymbolWejsciowy> symbols = Enum.GetValues(typeof(SymbolWejsciowy)) 
            .Cast<SymbolWejsciowy>() 
            .ToList(); 
+0

Tôi chưa bao giờ nhận ra rằng tôi làm sai lầm đó! Có, tôi không khởi tạo danh sách ... Cảm ơn! – netmajor

3

Trong tùy chọn 1 SymbolWejsciowy dụ của bạn và danh sách của bạn có cùng tên, tôi tưởng tượng đó là một lỗi typo.

Không dùng đó vào tài khoản của tôi muốn nói bạn đã không tạo ra các thể hiện của danh sách

symbol = new List<SymbolWejsciowy>(); 
2

Mã của bạn không bao giờ khởi danh sách. Hãy thử điều này:

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

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

Nó chắc chắn sẽ là tốt đẹp nếu Enum.GetValues() đã được cập nhật cho generics cách trở lại trong C# 2.0. Vâng, đoán chúng ta phải tự viết:

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

Tôi bao gồm Parse() vì nó được hưởng lợi từ generics theo cùng một cách.

Cách sử dụng:

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

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

(Ngoài: Tôi cũng muốn bạn có thể viết where T : enum chỉ các loại điều này Ngoài ra, where T : delegate..)

Các vấn đề liên quan