Вложенные перечисления с помощью System.Reflection.Emit
-
03-07-2019 - |
Вопрос
Я хочу создать класс со вложенным перечислением.
public class Foo
{
public enum Views
{
}
}
Однако класс System.Reflection.Emit.TypeBuilder не имеет DefineNestedEnum, а имеет только DefinedNestedType.Существует ModuleBuilder.DefineEnum, который позволяет мне создать перечисление, но я не нашел способа сделать его вложенным.Могу ли я создать перечисление, не подделывая его (т. е. используя EnumBuilder)?
Я переместил свое решение в ответ ниже.
Решение 2
Перемещая свой ответ, я поставил вопрос сюда.
Единственное, о чем я могу думать, это определить вложенный тип как запечатанный класс, который расширяет System.Enum и определить поля public|static|literal с постоянными значениями.По сути, это то, что делает компилятор C#, основываясь на том, что я узнал, разбирая его.Если я сделаю это и ссылаюсь на сборку, Intellisense распознает ее как перечисление и функционирует так же, как перечисление.
Это именно тот метод, который MSDN показывает, что Джереми связал его.
Другие советы
Смотрите пример в конце Эта статья, который делает именно то, что вы хотите.(Вы используете DefineNestedType с правильными аргументами)