2016-11-15 2 views
1

Mono.Cecil을 사용하여 열거 형인지 여부를 확인하는 방법 ??(C#) Mono.Cecil을 사용하여 열거 형인지 여부를 확인하는 방법은 무엇입니까?

Type.IsEnum을 사용하면 쉽게 확인할 수 있습니다. 하지만 TypeDefinition에서 비슷한 기능을 찾을 수 없습니다 ...

확인할 방법이 있습니까?

+1

이'에'IsEnum' 속성 것 같다 않습니다 ... 다시 열거 문자열을 구문 분석 방법 TypeDefinition'. [here] (https://github.com/jbevain/cecil/blob/master/Mono.Cecil/TypeDefinition.cs#L408)를 참조하십시오. 당신의 버전이 이것을 포함하지 않는다면 소스와 같은 확장 메소드를 작성할 수있다. – Rob

답변

3

TypeDefinitionIsEnum 속성이 있습니다. 당신의 다음 질문을하기 전에

아, 그리고, 여기가 세실를 사용하여 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)); 
}