【发布时间】:2016-11-16 17:59:34
【问题描述】:
如何使用Mono.Cecil判断是否为枚举类型??
仅使用 Type.IsEnum 很容易确定。但是我在 TypeDefinition 中找不到任何类似的函数...
有什么方法可以确定吗?
【问题讨论】:
-
TypeDefinition上似乎确实有一个IsEnum属性。见here。如果您的版本不包含此功能,您可以编写一个与源代码相同的扩展方法
标签: c# mono.cecil
如何使用Mono.Cecil判断是否为枚举类型??
仅使用 Type.IsEnum 很容易确定。但是我在 TypeDefinition 中找不到任何类似的函数...
有什么方法可以确定吗?
【问题讨论】:
TypeDefinition 上似乎确实有一个 IsEnum 属性。见here。如果您的版本不包含此功能,您可以编写一个与源代码相同的扩展方法
标签: c# mono.cecil
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));
}
【讨论】: