Подтвердить что ты не робот

Как добавить значение перечисления в список

У меня есть перечисление:

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

Я всегда получаю исключение

Ссылка на объект не установлена ​​в экземпляр объекта.

Что я делаю неправильно:/Пожалуйста, помогите:)

4b9b3361

Ответ 1

Как уже указывалось в других ответах, проблема в том, что вы объявили список, но вы его не построили, поэтому при попытке добавить элементы вы получаете NullReferenceException.

Обратите внимание: если вы хотите создать новый список, вы можете использовать более сжатый синтаксис инициализатора коллекции :

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

Если вам нужен список, содержащий все значения, вы можете получить его, вызвав Enum.GetValues:

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

Ответ 2

В вашей опции 1 экземпляр SymbolWejsciowy и ваш список имеют одно и то же имя, я предполагаю, что ошибка опечатки.

Не учитывая этого, я бы сказал, что вы не создали экземпляр списка

symbol = new List<SymbolWejsciowy>();

Ответ 3

Ваш код никогда не инициализирует список. Попробуйте следующее:

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

и

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

Ответ 4

Конечно, было бы неплохо, если бы Enum.GetValues() был обновлен для generics обратно в С# 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");

(ASIDE: Я также хочу, чтобы вы могли написать where T : enum для такого рода вещей. Кроме того, where T : delegate.)