使用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
类型本身不可为null,因此as
运算符将无法对其进行操作。
其次,enum
类型实际上不是short
。它是一个支持short
的枚举类型,但它需要显式转换为short,然后才能进行从short
到Nullable<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;