具有多个值的枚举名称

时间:2009-09-09 07:09:05

标签: c# enums

在我的项目中,我使用的是枚举示例:

public enum NcStepType { Start = 1, Stop = 3, Normal = 2 }

我正在从数据库中读取值,但有时我的记录中有0值,所以我想要一个看起来像

的枚举
public enum NcStepType { Start = 1 OR 0, Stop = 3, Normal = 2 }

这可能(在c#中)?

8 个答案:

答案 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#中,枚举只能有一个值。

没有任何内容表明数据库中的值必须直接映射到您的枚举值。每当您从数据库中读取Start0时,您都可以非常轻松地指定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)。