2016-11-15 10 views
1

Mono.Cecilを使用して列挙型かどうかを調べる方法(C#)Mono.Cecilを使用して列挙型かどうかを調べる方法

Type.IsEnumを使用するだけで簡単に判断できます。しかし、私はTypeDefinitionで類似の機能を見つけることができません...

決定する方法はありますか?

+1

のint値だとあなたが列挙型文字列を解析する方法ですTypeDefinition'。 [ここ](https://github.com/jbevain/cecil/blob/master/Mono.Cecil/TypeDefinition.cs#L408)を参照してください。あなたのバージョンにこれが含まれていない場合は、ソースと同じ拡張メソッドを書くことができます – Rob

答えて

3

TypeDefinitionIsEnumというプロパティがあります。

ああ、あなたがあなたの次の質問をする前に、ここに戻って、それは `の` IsEnum`プロパティがあるように思えない...セシルを使用して、

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)); 
} 
関連する問題