假设我想将 Double x 转换为 Decimal y 。有很多方法可以做到这一点:

1. var y = Convert.ToDecimal(x);    // Dim y = Convert.ToDecimal(x)
2. var y = new Decimal(x);          // Dim y = new Decimal(x)
3. var y = (decimal)x;              // Dim y = CType(x, Decimal)
4. -- no C# equivalent --           // Dim y = CDec(x)

从功能上讲,以上所有内容都做同样的事情(据我所知)。除了个人品味和风格之外,是否有特别的理由选择一个选项而不是另一个?

编辑 :这是通过在 Release 配置中编译三个 C# 选项生成的 IL:
1. call valuetype [mscorlib]System.Decimal [mscorlib]System.Convert::ToDecimal(float64)
   --> which calls System.Decimal::op_Explicit(float64)
       --> which calls System.Decimal::.ctor(float64)
2. newobj instance void [mscorlib]System.Decimal::.ctor(float64)
3. call valuetype [mscorlib]System.Decimal [mscorlib]System.Decimal::op_Explicit(float64)
   --> which calls System.Decimal::.ctor(float64)

这是通过编译 Release 配置中的四个 VB 选项生成的 IL:
1. call valuetype [mscorlib]System.Decimal [mscorlib]System.Convert::ToDecimal(float64)
   --> which calls System.Decimal::op_Explicit(float64)
       --> which calls System.Decimal::.ctor(float64)
2. call instance void [mscorlib]System.Decimal::.ctor(float64)
3. newobj instance void [mscorlib]System.Decimal::.ctor(float64)
4. newobj instance void [mscorlib]System.Decimal::.ctor(float64)

所以,这一切都以 System.Decimal::.ctor(float64) 告终

最佳答案

Convert.ToInt32() 将四舍五入应用于实数,而转换为 int 只是删除小数部分。在我看来,“转换”的类型转换方法过于依赖 .NET 框架的魔力。如果您知道必须进行转换,那么明确地描述它是最容易理解的。在大多数情况下,除非不需要任何转换且强制转换才有效,否则我会选择Convert选项。

关于c# - 转换数字类型 : Which style to use?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7662398/

10-09 18:19
查看更多