1

私は2つの列挙型を持っています:

public enum test1 {
   t1=1,
   t2=0 
}
public enum test2 {
   tt1 = test1.t1,
   tt2= test1.t2 
}

tt1 についての知識があれば、そこから t1 を取得できますか。キーの知識を持つ辞書のように使いたいのですが、そのキーに対応する値を取得できます。

以下のステートメントを使用しても、正しい出力が得られます。

var kkk = (test1) test2.tt1 ;
4

2 に答える 2

2

test1さて、あなたが表示したコードは、ゼロベースであるため、次のように宣言しているため、少し混乱していますtest2

public enum test2 {
   tt1,
   tt2 
}

類似しているでしょう。

それにもかかわらず、test2値がある場合、たとえばtt1、実際にはそれを値にキャストできtest1ます。

var t = (test1)test2.tt1;

根底にある同じint価値観を共有しているからです。したがって、仮説として、辞書があり、変数Dictionary<test1, object>を使用して値を取得できます。test2

var val = d[(test1)test2.tt1];
于 2013-09-11T16:20:32.170 に答える
0

簡単な答えは: いいえ。

列挙型の初期値は、コンパイル時に既知である必要があります。次に、コンパイラはそれを(あなたの場合)intに変換します。

したがって、test1.t2 は 1 になり、test2.tt2 は同じ値になります。しかし、コード ビューからは、これは 2 つの同一の値であり、まったく関係がありません。

enum tt2 から正確に知りたい場合は、値を取得する必要があります。いくつかのカスタム属性を作成し、リフレクションを介してこの情報を受け取ります。

または、辞書を自分で(手動で)入力するだけです

        Dictionary<test1, test2> dict = new Dictionary<test1, test2>() {
            { test1.t1, test2.tt1 }, 
            { test1.t2, test2.tt2 }, 
        };
于 2013-09-11T16:35:06.850 に答える