2017-12-19 28 views
-1

C#에서 DWARF 파서를 작성하려고합니다. DWARF는 숫자 유형 (DW_FORM_data2, DW_FORM_data4, DW_FORM_data8, DW_FORM_sdata, DW_FORM_udata)의 개념을 가지고 있으며 모두 숫자 유형으로 해석 될 수 있습니다. 위의 DW_FORM_* 클래스가 구현하는 IConstant 클래스를 구현하고 싶습니다. (열거 형에 ushort, int 등을 캐스팅 할 수있는 것처럼) 열거 형으로 캐스팅 할 수있는 클래스를 구현하고 싶습니다.C#에서 열거 형으로 캐스팅 할 수있는 새로운 숫자 형식을 만드는 방법

그러나 캐스트 연산자는 정적 메서드이며이를 열거 형에 넣을 수 없습니다. 열거 형으로 변환 할 수있는 숫자 형식 그룹을 만드는 방법은 무엇입니까? 하나의 복잡한 요소는 DW_FORM_udata 또는 DW_FORM_sdata 숫자의 크기 (8 비트, 32 비트 등)가 디코딩 될 때까지 정의되지 않는다는 것입니다.

+0

'enum'에 캐스트하고 싶습니까? – NetMage

+1

변환을 수행하는 방법이 아닌 왜 전송하고 싶습니까? – DavidG

+0

예. 열거 형 아마도 방법이 갈 길입니다. 그래서 그냥 ToEnum() 메소드를 인터페이스에 추가하면됩니까? 그게 내가 찾는 대답 일거야. 'ToEnum' 일반을 만들겠습니까? – watkipet

답변

0

당신은 간단한 인터페이스를 만들 수 있습니다 (확실하지 IConstant이 가장 좋은 이름) ​​:

public interface IConstant { 
    TEnum ToEnum<TEnum>(); 
} 

다음 숫자 형식의 각 클래스에서, 같은 뭔가를 구현 :

public TEnum ToEnum<TEnum>() { 
    return (TEnum)Enum.ToObject(typeof(TEnum), Value); 
} 

다음을 전화에서 enum 유형을 지정하여 전화 할 수 있습니다.

var ev = data8.ToEnum<TestEnum>(); 

클래스의 세부 사항을 알지 못하면 단일 구현으로 추상 클래스를 사용하는 것이 더 나은지 말하기 어렵습니다.

+0

내 경우에는 아주 잘 작동합니다. 감사. 특히 다른 "상수"유형은 다른 C# 숫자 유형으로 형변환 될 것이기 때문에 특히 그렇습니다. DWARF는 그것들을 모두 "상수"클래스에 넣습니다. 그래서 그 이름을 호출했습니다. – watkipet