0

我有一系列与数据库中使用的数字 ID 相对应的枚举,即...

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

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

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

一个类有一个 Object 类型的 'ResponseTypeEnum' 属性,该属性在运行时设置,并将成为各种响应类型枚举之一......

MyClass.ResponseTypeEnum = ResponseType2

我知道所有响应类型枚举都将具有 Accept 和 Reject 值,所以我想知道是否可以在不知道枚举类型的情况下按名称引用枚举的值,即一旦我分配了 ResponseType2对于我的类的 ResponseTypeEnum 属性,是否有一种方法可以引用该枚举的 Reject 值,即...

MyClass.ResponseTypeEnum.Reject

在这种情况下,解析的值将是 11、13 或 15,具体取决于我分配给 ResponseTypeEnum 属性的枚举。

这可能吗?而且,至关重要的是,这是一种好的做法吗?有没有更好的方法来实现这一点?

4

2 回答 2

1

我不认为这是一个好主意。

我会创建一个ResponseType具有两个属性AcceptReject.
此外,我将创建三个派生类,将这些属性设置为正确的值:

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并更改为 type ResponseType

现在的用法是这样的:

MyClass.ResponseType = new ResponseType1();

您可以MyClass.ResponseTypeswitch没有问题的语句中使用:

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 回答