Создать перечисление, используя отражение - PullRequest
4 голосов
/ 24 января 2012

Предлагает ли C# способ создания Enum типа с нуля с использованием отражения?

Предположим, у меня есть коллекция strings: {"Single", "Married", "Divorced"}, и я хочу построить следующий тип enum во время выполнения:

enum PersonStatus
{
    Single, Married, Divorced
}

Это как-то возможно?

Ответы [ 2 ]

8 голосов
/ 24 января 2012

Предлагает ли C # способ создания типа Enum с нуля с использованием отражения?

Да, это возможно. Если вы хотите создавать типы (включая перечисления) во время выполнения, вы можете использовать Reflection.Emit , чтобы испустить фактический код MSIL.

Вот конкретный пример того, как этого добиться с помощью метода DefineEnum.

8 голосов
/ 24 января 2012

Не без действительно грубых вещей, таких как создание сборок с помощью Emit. Как бы вы использовали такое перечисление в любом случае? Какова реальная цель здесь?

РЕДАКТИРОВАТЬ: Теперь, когда мы знаем, что вы действительно хотите сделать, эта страница предлагает вам достичь своей цели с помощью кода, подобного следующему:

private void listViewComplex_CellEditStarting(object sender, CellEditEventArgs e)
{
    // Ignore edit events for other columns
    if (e.Column != this.columnThatYouWantToEdit)
        return;

    ComboBox cb = new ComboBox();
    cb.Bounds = e.CellBounds;
    cb.Font = ((ObjectListView)sender).Font;
    cb.DropDownStyle = ComboBoxStyle.DropDownList;
    cb.Items.AddRange(new String[] { "Single", "Married", "Divorced" });
    cb.SelectedIndex = 0; // should select the entry that reflects the current value
    e.Control = cb;
}
...