dls*_*sou 17 c# enums nullable
我只需要能够将一个对象转换为可以为空的枚举.对象可以是enum,null或int.谢谢!
public enum MyEnum { A, B }
void Put(object value)
{
System.Nullable<Myenum> val = (System.Nullable<MyEnum>)value;
}
Put(null); // works
Put(Myenum.B); // works
Put(1); // Invalid cast exception!!
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 44
怎么样:
MyEnum? val = value == null ? (MyEnum?) null : (MyEnum) value;
Run Code Online (Sandbox Code Playgroud)
从盒装转换int为MyEnum(如果value为非null)然后使用隐式转换MyEnum来Nullable<MyEnum>.
这没关系,因为你被允许从枚举的盒装形式拆箱到其底层类型,反之亦然.
我认为,这其实是一个转换并不保证由C#规范工作,但在保证通过CLI规范工作.因此,只要您在CLI实现上运行C#代码(您将成为:),您就可以了.
Ree*_*sey 13
这是因为您在单个操作中进行拆箱和转换,这是不允许的.您只能将类型取消装箱到与对象内部装箱相同的类型.
有关详细信息,我建议阅读Eric Lippert的博客:Representation and Identity.