使用反射创建枚举

本文关键字:枚举 创建 反射 | 更新日期: 2023-09-27 18:21:07

C#是否提供了一种使用反射从头创建Enum类型的方法?

假设我有一个strings:{"Single", "Married", "Divorced"}的集合,并且我愿意在运行时构建以下枚举类型

enum PersonStatus
{
    Single, Married, Divorced
}

这有可能吗?

使用反射创建枚举

如果不做一些非常棘手的事情,比如使用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;
}

C#是否提供了一种使用反射从头开始创建枚举类型的方法?

是的,这是可能的。如果你想在运行时创建类型(包括枚举),你可以使用Reflection.Emit来发出实际的MSIL代码。

以下是如何使用DefineEnum方法实现这一点的具体示例。