我有一系列与数据库中使用的数字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属性的枚举。
这可能吗?而且,至关重要的是,这是一种好的做法吗?有没有更好的方法来实现这个目标?
答案 0 :(得分:1)
我认为这不是一个好主意。
我会创建一个包含两个属性ResponseType
和Accept
的课程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;
}