使用枚举处理强类型

时间:2012-02-07 15:21:50

标签: c# enums

如果我定义了一个继承自short的enums,我对enums有疑问:

public enum ProyectoEstatus : short
{
    EstatusPorDefecto = 26,
    AprobadoUnidadNegocio = 6,
    CanceladoAreaComercial = 18
}

为什么我不能这样做?

Nullable<short> aux = ProyectoEstatus.CanceladoAreaComercial as ProyectoEstatus;

如果我的变量类型名为aux Nullable

5 个答案:

答案 0 :(得分:1)

您的枚举类型为ProyectoEstatus而不是short。它将存储在short中,但类型不同,您必须明确地将其转换为short

Nullable<short> aux = (short) ProyectoEstatus.CanceladoAreaComercial;

答案 1 :(得分:1)

简而言之:

Nullable<short> aux = (short)(ProyectoEstatus.CanceladoAreaComercial as ProyectoEstatus);

鉴于你无论如何都要做空,你可能会失去对ProyectoEstatus的演员阵容:

Nullable<short> aux = (short)(ProyectoEstatus.CanceladoAreaComercial);

答案 2 :(得分:1)

首先,enum类型本身不可为空,因此as运算符无法使用它。

其次,enum类型实际上不是short。它是一个short支持的枚举类型,但它需要明确地转换为一个短片,然后才能进行从shortNullable<short>隐式演员表:

    Nullable<short> aux = (short)ProyectoEstatus.CanceladoAreaComercial 

答案 3 :(得分:1)

试试这个:

Nullable<short> aux = (short)ProyectoEstatus.CanceladoAreaComercial;

答案 4 :(得分:1)

当我尝试该代码时,我得到了:

  

as运算符必须与引用类型或可空类型一起使用   ('UserQuery.ProyectoEstatus'是一种不可为空的值类型)

这似乎是不言自明的。枚举是一种值类型,因此不允许使用“as”。

如果我在没有as ProyectoEstatus的情况下尝试:

  

无法隐式转换类型'UserQuery.ProyectoEstatus'   '短?'。存在显式转换(您是否错过了演员?)

这又是自我解释的。我们应该使用显式转换。

如果我按如下方式进行显式转换,则可以:

Nullable<short> aux = (short)ProyectoEstatus.CanceladoAreaComercial;

还有什么情况你认为这是空的?如果你试图将枚举值转换为可以为空的short,那么枚举值将永远不会为null,因此似乎没有必要让它一目了然。您的实际代码是否比此示例更复杂?