Передача типа перечисления в качестве аргумента?
Возможный дубликат:
С# перечисления как параметры функции?
Мне было интересно, как я могу передать тип перечисления в качестве аргумента метода.
Я пытаюсь создать общий метод, который будет принимать поле со списком и перечисление, и заполнить поле со списком каждым элементом перечисления.
Ответы
Ответ 1
Ссылка на Преобразование Enum To Dictionary:
public static IDictionary<String, Int32> ConvertEnumToDictionary<K>()
{
if (typeof(K).BaseType != typeof(Enum))
{
throw new InvalidCastException();
}
return Enum.GetValues(typeof(K)).Cast<Int32>().ToDictionary(currentItem => Enum.GetName(typeof(K), currentItem));
}
Затем вы можете заполнить свой ComboBox возвращаемыми элементами словаря.
Обратите также внимание на следующее:
Перечисление словаря на С#
Перечисление в словарь
Ответ 2
Вы можете передать перечисление в общем виде следующим образом:
private void Method(Enum tEnum)
{
Enum.GetValues(tEnum.GetType());
}
И GetValues предоставит вам значения, которые возможны для этого перечисления.
Использование будет немного странным:
Method(EnumType.Value)
чтобы он не соответствовал и другим идеям.
Ответ 3
Я думаю, что это лучше всего объясняется примером:
Скажем, у вас есть перечисление:
enum MyEnum
{
One,
Two,
Three
}
Вы можете объявить метод, например:
public static void MyEnumMethod(Enum e)
{
var enumValues = Enum.GetValues(e.GetType());
// you can iterate over enumValues with foreach
}
И вы бы назвали его так:
MyEnumMethod(new MyEnum());
Ответ 4
Используя этот метод, вы не можете добавить любой тип перечисления, как это: AddItems(myCombobox, typeof(Options))
public void AddItems (ComboBox cboBox, Type enumType)
{
cboBox.Items.AddRange(Enum.GetValues (enumType).Cast<object> ().ToArray ());
}
enum Options
{
Left, Right, Center
}
Ответ 5
вы могли бы использовать своего рода общий помощник перечисления, как здесь: http://devlicious.com/blogs/christopher_bennage/archive/2007/09/13/my-new-little-friend-enum-lt-t-gt.aspx.
Ответ 6
Вы можете использовать:
Enum.GetValues(typeof(MyEnumType))
и просто заполнить элементы со списком из этого
Изменить: и, конечно, используйте отражение, чтобы получить тип перечисления:)