Вот перечисление;
public enum myEnum{
A= 1,
B= 2,
C= 3,
D= 4,
}
Мне нужен список, содержащий все, кроме D, таким образом это работает;
List<Enum>{myEnum.A, myEnum.B, myEnum.C}
но, конечно, это очень некрасиво. Как можно напрямую преобразовать и отфильтровать D этого перечисления
@MoritzSchmidt asp.net 4.6
asp.net - это не язык, это фреймворк. вы используете С#
@MoritzSchmidt да, я отредактировал заголовок так
Что вы хотите получить в своем списке - имена или ценности?
@ Хенк Холтерман, почему ты снова открыл этот дубликат? Пожалуйста, закройте его, так как за него проголосовали несколько человек как за дубликат.
Вы можете преобразовать перечисление в список так:
var enumList = Enum.GetValues(typeof(myEnum)).Cast<myEnum>().ToList();
А чтобы удалить myEnum.D
, просто вызовите метод Remove
:
var enumList = Enum.GetValues(typeof(myEnum)).Cast<myEnum>().ToList().Remove(myEnum.D);
Как упоминалось в комментариях, вы также можете добавить только значения Enums, которые не являются myEnum.D
:
var enumList = Enum.GetValues(typeof(myEnum)).Cast<myEnum>().ToList().Where(val => val != myEnum.D);
Лучше использовать where
вместо того, чтобы добавлять нужные в список, а затем удалять...
Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Where(x => x != MyEnum.D).ToList();
@TyForHelpDude это не так, он проецирует объекты в новый список...
Да, я вижу, что мое ожидание было List<Enum> с переменными списка отдельных перечислений, а не List<MyEnum>. В любом случае, я тоже могу с этим жить. Спасибо.
Вы можете получить все значения перечисления, вызвав Enum.GetValues(type)
(https://docs.microsoft.com/en-us/dotnet/api/system.enum.getvalues?view=netframework-4.8)
После получения всех значений вы можете исключить определенные значения, которые вам не нужны:
public class Program
{
public static void Main()
{
var allValues = Enum.GetValues(typeof (MyEnum))
.Cast<MyEnum>()
.Except(new[]{MyEnum.D})
.ToArray();
foreach (var val in allValues)
{
Console.WriteLine(val);
}
}
}
public enum MyEnum
{
A,
B,
C,
D
}
Это выведет:
А Б С
Что это за язык?