我刚刚将VB.NET的代码片段转换为C#,并且偶然发现了这个问题。将对象转换为值类型时,解决c#拆箱异常的最佳方法是什么?
考虑以下代码:从编译器或运行时
Dim x As Integer = 5
Dim y As Object = x
Dim z As Decimal = CType(y, Decimal)
没有错误。 z是五。
现在让我们从编译器,但在运行时会抛出异常的代码为C#
int x = 5;
object y = x;
decimal z = (decimal)y;
没有错误翻译:
Cannot unbox "y" to "decimal"
现在的问题是,这将是最明智的C#的方式做这个。
目前我的代码看起来像。
int x = 5;
object y = x;
decimal z = decimal.Parse(y.ToString());
但另一种解决办法是:
decimal z = (decimal)(int)y;
这看起来有点混乱,但propably比decimal.Parse开销少,我猜。
是否有一个原因,你正在创建新的对象y,而不是让.net只是盒x你? – kemiller2002 2009-07-20 13:37:52
欲了解更详细的问题以及为什么它的行为如此,你可以阅读http://blogs.msdn.com/ericlippert/archive/2009/03/19/representation-and-identity.aspx – SolutionYogi 2009-07-20 13:42:39