在不知道其类型的情况下参考传递的Enum的属性

时间:2013-02-19 11:33:04

标签: c# class enums

我有一系列与数据库中使用的数字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属性的枚举。

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

2 个答案:

答案 0 :(得分:1)

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

我会创建一个包含两个属性ResponseTypeAccept的课程Reject 此外,我将创建三个派生类,将这些属性设置为正确的值:

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;
}

答案 1 :(得分:0)

  

这可能吗?

您可以将ResponseTypeEnum作为动态类型。

  

这是一个好习惯吗?

我不推荐它

  

有更好的方法来实现这一目标吗?

是。你可以在这里使用更明确的类结构,例如。

class Response
{ 
  enum type;
  bool accept;
}