在我的项目中,我使用的是枚举示例:
public enum NcStepType { Start = 1, Stop = 3, Normal = 2 }
我正在从数据库中读取值,但有时我的记录中有0值,所以我想要一个看起来像
的枚举public enum NcStepType { Start = 1 OR 0, Stop = 3, Normal = 2 }
这可能(在c#中)?
答案 0 :(得分:2)
不,基本上。您必须给它一个值(可能是1),并手动解释另一个(0)。
答案 1 :(得分:2)
不,不是,我不确定它在实践中会起作用。
从DB读取时,你不能只添加将0映射到1的逻辑吗?
答案 2 :(得分:2)
通常我在这种情况下定义0如下:
public enum NcStepType
{
NotDefined = 0,
Start = 1,
Normal = 2,
Stop = 3,
}
在代码的某个地方,我会做一个:
if(Step == NcStepType.NotDefined)
{
Step = NcStepType.Start;
}
这使得代码可读,每个人都知道会发生什么......(希望如此)
答案 3 :(得分:2)
您可以创建一个处理未知值的通用扩展方法:
public static T ToEnum<T>(this int value, T defaultValue)
{
if (Enum.IsDefined(typeof (T),value))
return (T) (object) value;
else
return defaultValue;
}
然后你可以简单地打电话:
int value = ...; // value to be read
NcStepType stepType = value.ToEnum(NcStepType.Start);
// if value is defined in the enum, the corresponding enum value will be returned
// if value is not found, the default is returned (NcStepType.Start)
答案 4 :(得分:1)
不,在C#中,枚举只能有一个值。
没有任何内容表明数据库中的值必须直接映射到您的枚举值。每当您从数据库中读取Start
或0
时,您都可以非常轻松地指定1
的值。
答案 5 :(得分:1)
public enum NcStepType { Start = 1 | 0, Stop = 3, Normal = 2 }
答案 6 :(得分:0)
C#中没有解决方案。但你可以采取两个步骤:
<强> 1。将数据库字段的默认值设置为1 2.将所有现有的0更新为1。
答案 7 :(得分:0)
据我所知你可以写这个
enum NcStepType { Start = 0, Start = 1, Stop = 3, Normal = 2 }
唯一的问题是后来没有办法告诉哪个Start
用于变量初始化(它总是看起来像是Start = 0
)。