我刚刚将一个代码片段从 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;
这看起来有点令人困惑,但我猜它的开销可能比 decimal.Parse 少。