0

データベースで使用される数値 ID に対応する一連の列挙型があります。つまり、...

public enum ResponseType1 {
    Accept = 10
    Reject = 11 };

public enum ResponseType2 {
    Accept = 12
    Reject = 13 };

public enum ResponseType3 {
    Accept = 14
    Reject = 15 };

クラスには、実行時に設定されるオブジェクト型の「ResponseTypeEnum」プロパティがあり、さまざまな応答型列挙型の 1 つになります ...

MyClass.ResponseTypeEnum = ResponseType2

すべての応答タイプの列挙型には Accept と Reject の両方の値があることがわかっているので、型を知らなくても名前で列挙型の値を参照できるかどうかを知りたいです。つまり、ResponseType2 を割り当てたら私のクラスの ResponseTypeEnum プロパティに、その列挙型の Reject 値を参照する方法はありますか?

MyClass.ResponseTypeEnum.Reject

この場合、解析された値は、ResponseTypeEnum プロパティに割り当てた列挙に応じて、11、13、または 15 になります。

これは可能ですか?そして、決定的に、これは良い習慣ですか? これを達成するためのより良い方法はありますか?

4

2 に答える 2

1

私はそれが良い考えだとは思わない。

ResponseTypeと の2 つのプロパティAcceptを持つクラスを作成しますReject
さらに、これらのプロパティを正しい値に設定する 3 つの派生クラスを作成します。

public abstract class ResponseType
{
    private readonly int _accept;
    private readonly int _reject;

    protected ResponseType(int accept, int reject)
    {
        _accept = accept;
        _reject = reject;
    }

    public int Accept { get { return _accept; } }
    public int Reject { get { return _reject; } }
}

public class ResponseType1 : ResponseType
{
    public ResponseType1() : base(10, 11) { }
}

public class ResponseType2 : ResponseType
{
    public ResponseType2() : base(12, 13) { }
}

public class ResponseType3 : ResponseType
{
    public ResponseType3() : base(14, 15) { }
}

MyClass.ResponseTypeEnumに名前をMyClass.ResponseType変更し、タイプに変更する必要がありResponseTypeます。

使用法は次のようになります。

MyClass.ResponseType = new ResponseType1();

問題なくステートメントMyClass.ResponseTypeで使用できます。switch

switch(databaseValue)
{
    case MyClass.ResponseType.Accept:
        // accept
        break;
    case MyClass.ResponseType.Reject:
        // reject
        break;
}
于 2013-02-19T11:36:32.243 に答える
0

これは可能ですか?

動的タイプとしてResponseTypeEnumを使用できます。

これは良い習慣ですか?

私はそれをお勧めしません

これを達成するためのより良い方法はありますか?

はい。ここでは、より明示的なクラス構造を使用できます。

class Response
{ 
  enum type;
  bool accept;
}
于 2013-02-19T11:42:03.893 に答える