题
我刚转换的代码片段从VB.NET到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开销少,我猜。
解决方案
(decimal)(int)x
是这样,如果你期望的是盒装的对象是一个整数的正道。字符串转换和解析,不在于攻击问题的好办法,并会导致一些开销。
如果你只知道该对象可以被转换以某种方式decimal
,尝试System.Convert.ToDecimal
方法。它会处理,对于你。
其他提示
如何:
z = Convert.ToDecimal(y);
Convert.ToDecimal(Y);
如果你想成为完全安全的,你可以尝试:
int x = 5;
object y = x;
decimal z;
if (Decimal.TryParse(y.ToString(), out z))
{
// z is a decimal
}
else
{
// z is not a decimal
}
如果有人设置y为=“驴”,你可以处理它没有抛出异常的方式。当然,你可能更愿意抛出一个异常,如果Z不能转换。又一个选项...
不隶属于 StackOverflow