RJP*_*RJP 5 c# casting type-conversion
所以我刚看到这行代码:
Item = (int?)(int)row["Item"];
Run Code Online (Sandbox Code Playgroud)
它有什么理由不能成为:
Item = (int?)row["Item"];
Run Code Online (Sandbox Code Playgroud)
参见拳击可空类型(C#) ; 一个对象可以直接转换为可以为null的int(但如果该对象实际上不是int,则会导致InvalidCastException).两个强制转换将执行直接强制转换的一件事int?是对null执行隐式检查.
当转换为int然后转换为可以为null的int时,如果对象变量的值为null,则将抛出ICE.当直接转换为可以为null的int时,null处理得很好,但是如果代码然后尝试检索Value属性而不检查实际是否存在,则抛出InvalidOperationException.
这看起来像是"快速失败"的半尝试,我不推荐它作为"好的代码".只需直接转换为nullable,然后测试HasValue属性并从那里开始.