Create enum using reflection

2019-05-07 16:16发布

Does C# offer a way to create Enum type from scratch using reflection?

Suppose, I have a collection of strings: {"Single", "Married", "Divorced"} and I'm willing to build the following enum type in runtime:

enum PersonStatus
{
    Single, Married, Divorced
}

Is this somehow possible?

2条回答
戒情不戒烟
2楼-- · 2019-05-07 16:24

Not without doing really gnarly things like generating assemblies using Emit. How would you use such an enum anyway? Whats the real goal here?

EDIT: Now that we know what you really want to do, this page suggests that you can acheive your goal using code like the following:

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;
}
查看更多
Summer. ? 凉城
3楼-- · 2019-05-07 16:38

Does C# offer a way to create Enum type from scratch using reflection?

Yes, it's possible. If you want to create types (including enums) at runtime you could use Reflection.Emit in order to emit the actual MSIL code.

Here's a concrete example of how to achieve that using the DefineEnum method.

查看更多
登录 后发表回答