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

Передача типа перечисления в качестве аргумента?

Возможный дубликат:
С# перечисления как параметры функции?

Мне было интересно, как я могу передать тип перечисления в качестве аргумента метода.

Я пытаюсь создать общий метод, который будет принимать поле со списком и перечисление, и заполнить поле со списком каждым элементом перечисления.

4b9b3361

Ответ 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
  }

Ответ 6

Вы можете использовать:

Enum.GetValues(typeof(MyEnumType))

и просто заполнить элементы со списком из этого

Изменить: и, конечно, используйте отражение, чтобы получить тип перечисления:)