首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >.NET核心中缺少EnumBuilder的解决方法

.NET核心中缺少EnumBuilder的解决方法
EN

Stack Overflow用户
提问于 2020-05-06 11:18:15
回答 1查看 132关注 0票数 0

我正在尝试将一个项目从.NET框架转换到.NET核心,但我遇到了System.Reflection.Emit.EnumBuilder.CreateType没有在.NET核心中实现的问题。如何在.NET核心中动态实现枚举?有没有一些神奇的CIL可以做到这一点,或者以某种方式模拟Enum?

EN

回答 1

Stack Overflow用户

发布于 2020-05-06 11:18:15

花了几个小时对此进行反向工程,但它是这样的:

代码语言:javascript
运行
复制
    class EnumTypeBuilder
    {
        private TypeBuilder _enumTypeBuilder;

        public EnumTypeBuilder(ModuleBuilder builder, string name, TypeAttributes attributes, Type underlyingType)
        {
            _enumTypeBuilder = builder.DefineType(name, attributes | TypeAttributes.AutoLayout | TypeAttributes.AnsiClass | TypeAttributes.Sealed, typeof(System.Enum), PackingSize.Unspecified, TypeBuilder.UnspecifiedTypeSize);
            FieldBuilder valueFieldBuilder = _enumTypeBuilder.DefineField("value__", underlyingType, FieldAttributes.Public | FieldAttributes.SpecialName | FieldAttributes.RTSpecialName);
        }

        public void DefineLiteral(string name, object value)
        {
            FieldBuilder enumerationFieldBuilder = _enumTypeBuilder.DefineField(name, _enumTypeBuilder, FieldAttributes.Static | FieldAttributes.Public | FieldAttributes.Literal);
            enumerationFieldBuilder.SetConstant(value);
        }

        public Type CreateType()
        {
            return _enumTypeBuilder.CreateType();
        }
    }

这似乎生成的类型在我能找到的每一种方式上都与Enum完全相似。请注意,传入DefineLiteral的类型必须与传入构造函数的基础类型匹配。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61626772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档