为什么short转int会失败?我们有一些代码可以将数据从MicrosoftAccess数据库归档到MSSQLServer数据库。假设我们已经从Access表填充了数据读取器,并且我们向SqlCommand添加了一个参数以准备插入,那么我们的类型转换失败了。这是代码:oSqlServerDbCmd_ForInsert.Parameters.AddWithValue("@Duration",(int)oReader["Duration"]);oReader中的字段其实是一个AccessInteger,是C#的简称。如果我们在这里投球很短,那很好。但如果我们转换为int,代码将抛出InvalidCastException。我可能误解了MSDN文档:“存在从short到int、long、float、double或decimal的预定义隐式转换。”...但这听起来应该可行(我的推理是,如果定义了隐式转换,为什么显式类型转换不起作用?)。我意识到转换甚至不是必需的,因为AddWithValue需要一个对象,所以我们已经有效地从我们的代码中删除了转换,但我想看看为什么这个转换失败的解释,以防我们遇到这样的事情未来。你有什么是拆箱的例子。特别是拆箱时,只能拆箱原来装箱的值的类型;如果该类型是A并且您要拆箱到B,则是否存在从A到B的隐式转换并不重要(拆箱仍然会失败)。有关解释,请参阅EricLippert关于该主题的经典博客文章。因为你要拆箱,所以你必须转换为一个非常具体的类型——问题是oReader["Duration"]返回一个对象实例:shortmyShort=42;对象o=myShort;intmyInt=(int)o;//failsifConvertittoshortfirst,thentoint,anditwillsucceed:以上是C#学习教程:short转int为什么会失败?如果分享的所有内容对您都有用,需要了解更多C#学习教程,希望您多加关注—(int)(short)oReader["Duration"]本文收集自网络,不代表一个位置。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:
