如果我定义了一个继承自short的enums
,我对enums
有疑问:
public enum ProyectoEstatus : short
{
EstatusPorDefecto = 26,
AprobadoUnidadNegocio = 6,
CanceladoAreaComercial = 18
}
为什么我不能这样做?
Nullable<short> aux = ProyectoEstatus.CanceladoAreaComercial as ProyectoEstatus;
如果我的变量类型名为aux Nullable
答案 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
支持的枚举类型,但它需要明确地转换为一个短片,然后才能进行从short
到Nullable<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,因此似乎没有必要让它一目了然。您的实际代码是否比此示例更复杂?