我想请您解释一下这个问题——问题基本上已经说明了一切,但这里有一些额外的信息:
只是想要一个关于这个的解释。与其相关的问题已经被解决了,但是现在我们需要更多的背景知识来完全理解。
//this line works OK
int i = Convert.ToInt32(dt.Rows[x]["SmallintColumnName"]);
//this line errors out
int j = (int)dt.Rows[x]["SmallintColumnName"];
我觉得这很奇怪,但我猜这样做有其合理的论据。
谢谢。
编辑: 嗨@Damien_The_Unbeliever- 这是一个无效的转换异常 - 指定的转换无效。 我想我需要阅读一下装箱和拆箱。我以为两个都可以工作。 现在我刚刚尝试了:
int k = (Int32)r_dtAttribute.Rows[x]["CultureId"];
这也会出现同样的无效类型转换异常 - 所以有人能告诉我实际上它们之间的区别是什么吗?
//fails
int k = (Int32)r_dtAttribute.Rows[x]["CultureId"];
并且
//works
int i = Convert.ToInt32(dt.Rows[x]["SmallintColumnName"]);
Convert.ToInt32函数与(Int32)强制类型转换有什么不同?
谢谢
Convert.ToInt32
返回0
,但是(int)
会引发异常。 - GrundyInvalidCastException
异常。 - Damien_The_UnbelieverInvalidCastException
? :-) - Grundysmallint
,ADO 永远不会返回装箱的int32
。因此,(int)
永远不起作用,无论特定行是否返回null
或实际值。 - Damien_The_Unbeliever