2010-05-30 6 views
12

Je ENUM:comment ajouter de la valeur enum à la liste

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

et je veux créer une liste de ce ENUM

public List<SymbolWejsciowy> symbol; 

mais dans ma façon d'ajouter ENUM à la liste:
1.

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

2.
symbol.Add(SymbolWejsciowy.K1);

Je reçois toujours Exception

Référence d'objet non définie à une instance d'un objet.

ce que je fais mal:/S'il vous plaît aider :)

Répondre

15

Comme d'autres réponses ont déjà souligné, le problème est que vous avez déclaré une liste, mais vous n'avez pas construit un si vous obtenez un NullReferenceException lorsque vous essayez d'ajouter des éléments.

Notez que si vous voulez construire une nouvelle liste, vous pouvez utiliser plus concise collection initializer syntax:

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

Si vous voulez une liste contenant toutes les valeurs, alors vous pouvez obtenir ce en appelant Enum.GetValues:

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

Je ne réalise que je fais cette erreur! Oui, je n'initialise pas la liste ... Merci! – netmajor

3

En option 1 instance SymbolWejsciowy et votre liste ont le même nom, j'imagine que c'est une erreur de faute de frappe.

Sans prendre cela en compte, je dirais que vous ne l'avez pas créé l'instance de la liste

symbol = new List<SymbolWejsciowy>(); 
2

Votre code n'initialise la liste. Essayez ceci:

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

et

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

Ce serait bien si Enum.GetValues() avait été mis à jour pour les génériques en C# 2.0. Eh bien, suppose que nous devons l'écrire nous-mêmes:

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

J'inclus Parse() parce qu'il bénéficie de génériques de la même manière.

Utilisation:

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

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

(OPPOSITION: Je souhaite également vous pourriez écrire where T : enum pour tout ce genre de choses aussi, where T : delegate..)

Questions connexes