我刚刚将一个代码片段从VB.NET转换为C#,并偶然发现了这个问题.
考虑以下代码:
Dim x As Integer = 5
Dim y As Object = x
Dim z As Decimal = CType(y, Decimal)
Run Code Online (Sandbox Code Playgroud)
编译器或运行时没有错误.z是五.
现在让我们将此代码翻译为C#
int x = 5;
object y = x;
decimal z = (decimal)y;
Run Code Online (Sandbox Code Playgroud)
编译器没有错误,但在运行时抛出异常:
Cannot unbox "y" to "decimal"
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,这将是最聪明的C#方式.
目前我的代码看起来像.
int x = 5;
object y = x;
decimal z = decimal.Parse(y.ToString());
Run Code Online (Sandbox Code Playgroud)
但另一种解决方案是:
decimal z = (decimal)(int)y;
Run Code Online (Sandbox Code Playgroud)
这看起来有点混乱,但可能比decimal.Parse更少开销.
(decimal)(int)x如果您希望盒装对象是整数,那么这是正确的方法.转换为字符串和解析不是攻击问题的好方法,并且会产生一些开销.
如果您只是知道可以以decimal某种方式转换对象,请尝试System.Convert.ToDecimal方法.它会为你处理.
| 归档时间: |
|
| 查看次数: |
4649 次 |
| 最近记录: |