使用enum处理强类型

本文关键字:强类型 处理 enum 使用 | 更新日期: 2023-09-27 18:23:43

我对enums有一个疑问,如果我定义了一个从short继承的enums,如下所示:

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

为什么我不能这么做??

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

如果我的变量aux的类型是Nullable

使用enum处理强类型

首先,enum类型本身不可为null,因此as运算符将无法对其进行操作。

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

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

只转换为short:

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

不管怎样,如果你的选角偏短,你可能会把选角输给ProyectoEstatus:

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

试试这个:

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

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

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

这似乎不言自明。枚举是一种值类型,因此不允许将"as"与它一起使用。

如果我在没有as ProyectoEstatus的情况下尝试,我会得到:

无法将类型"UserQuery.ProyectoEstatus"隐式转换为"短?"。存在显式转换(是否缺少强制转换?)

这也是不言自明的。我们应该使用显式转换。

如果我按照如下方式进行显式转换,它会起作用:

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

还有,在什么情况下,您希望它为空?如果您试图将枚举值转换为可为null的short,则枚举值永远不会为null,因此似乎没有必要让aux一眼就能为null。您的实际代码比这个例子更复杂吗?

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

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