2017-12-19 18 views
-1

C#でDWARFパーサーを作成しようとしています。 DWARFは、複数の数値型(DW_FORM_data2,DW_FORM_data4DW_FORM_data8DW_FORM_sdataDW_FORM_udata)の概念を持ち、すべてが列挙型に解決される可能性があります。上記のDW_FORM_*クラスが実装するIConstantクラスを実装して、enumにキャストすることができます(ushortintなどをenumにキャストできるのと同じです)。C#で列挙型にキャストできる新しい数値型を作成する方法

しかし、キャスト演算子は静的メソッドであり、列挙型には入れることができません。列挙型に変換できる数値タイプのグループを作成するにはどうすればよいですか? 1つの複雑な要因は、DW_FORM_udataまたはDW_FORM_sdataのサイズ(8ビット、32ビットなど)がデコードされるまで定義されていないことです。

+0

「enum」にキャストできますか? – NetMage

+1

変換を行う方法がないだけでキャストしたいのですが – DavidG

+0

はい。任意の列挙型。おそらく方法は行く方法です。だから、インターフェース上に 'ToEnum()'メソッドを追加するだけですか?それは私が探している答えかもしれません。あなたは 'ToEnum'ジェネリックを作りますか? – watkipet

答えて

0

あなたはシンプルなインターフェース(わからないIConstantが最高の名前です)を作成することができます。そして、

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

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

をしてから、数値型クラスのそれぞれにそれを実装、のようなもの電話でenumタイプを指定して呼び出すことができます。

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

クラスの詳細を知らなくても、1つの実装で抽象クラスを使用する方が良いかどうかを判断することはできません。

+0

私の場合、これは非常にうまくいきます。ありがとう。特に、異なる「定数」型は異なるC#数値型にキャストされるためです。 DWARFはそれらをすべて「定数」クラスに入れています。それが私がそれらを呼び出す理由です。 – watkipet

関連する問題