Как добавить значение перечисления в список
У меня есть перечисление:
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);
Я всегда получаю исключение
Ссылка на объект не установлена в экземпляр объекта.
Что я делаю неправильно:/Пожалуйста, помогите:)
Ответы
Ответ 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
.)