【问题标题】:(C#) How to determine whether it is an enum type using Mono.Cecil?(C#) 如何使用 Mono.Cecil 判断是否为枚举类型?
【发布时间】:2016-11-16 17:59:34
【问题描述】:

如何使用Mono.Cecil判断是否为枚举类型??

仅使用 Type.IsEnum 很容易确定。但是我在 TypeDefinition 中找不到任何类似的函数...

有什么方法可以确定吗?

【问题讨论】:

  • TypeDefinition 上似乎确实有一个 IsEnum 属性。见here。如果您的版本不包含此功能,您可以编写一个与源代码相同的扩展方法

标签: c# mono.cecil


【解决方案1】:

TypeDefinition 上有一个 IsEnum 属性。

哦,在你问下一个问题之前,这是你如何使用 Cecil 将枚举字符串解析回它的 int 值...

int ParseEnum(TypeReference enumRef, string value)
{
    var enumDef = enumRef.Resolve();
    if (!enumDef.IsEnum)
        throw new InvalidOperationException();

    int? result = null;

    foreach (var v in value.Split(',')) {
        foreach (var field in enumDef.Fields) {
            if (field.Name == "value__")
                continue;
            if (field.Name == v.Trim())
                result = (result ?? 0) | (int)field.Constant;
        }
    }

    if (result.HasValue)
        return result.Value;

    throw new Exception(string.Format("Enum value not found for {0}", value));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 2013-08-19
    • 2018-10-18
    • 2014-09-11
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    相关资源
    最近更新 更多