2010-05-30 14 views
12

tengo enumeración:cómo agregar valor de enumeración para enumerar

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

y quiero crear una lista de esta enumeración

public List<SymbolWejsciowy> symbol; 

pero en mi manera de añadir enumeración a la lista:
1.

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

2.
symbol.Add(SymbolWejsciowy.K1);

siempre consigo Excepción

referencia a objeto no establecida como instancia de un objeto.

lo que hago mal:/Por favor ayuda :)

Respuesta

15

Como otras respuestas ya han señalado, el problema es que se ha declarado una lista, pero no se han construido uno para que pueda obtener un NullReferenceException cuando intenta agregar elementos

Tenga en cuenta que si se quiere construir una nueva lista puede utilizar la más concisa collection initializer syntax:

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

Si desea una lista que contiene todos los valores a continuación, usted puede conseguir que llamando Enum.GetValues:

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

Nunca me di cuenta de que hago el mismo error! Sí, no inicializo la lista ... ¡Gracias! – netmajor

3

En la opción 1 instancia SymbolWejsciowy y su lista tienen el mismo nombre, supongo que eso es un error tipográfico.

Sin tomar en cuenta que yo diría que no creó la instancia de la lista

symbol = new List<SymbolWejsciowy>(); 
2

Su código nunca se inicializa la lista. Prueba esto:

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

y

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

Seguramente estaría bien si Enum.GetValues() se hubiera actualizado para genéricos en C# 2.0. Bueno, supongo que tenemos que escribirlo nosotros mismos:

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

que incluía Parse() porque se beneficia de los genéricos de la misma manera.

Uso:

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

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

(LADO: Deseo también se podría escribir where T : enum sólo para este tipo de cosas también, where T : delegate..)

Cuestiones relacionadas