为什么存在Convert.ToInt32(Int32)?

亚历克斯·西基林达

有过载Convert.ToInt32的是采用Int32作为参数。但是,即使文档说基本没有任何反应,该方法返回其输入。

问题是为什么我们会有这样的超载?有什么目的吗?谁能给我一个使用这种方法的例子吗?

我的想法:我认为我们可能拥有它,因为有一个超载会占用Object。因此,我们要消除拳击等等。但是我不确定。

格奥尔格

我的想法:

  • 对于代码生成:特别是在.NET 2.0中,生成了很多代码,例如键入数据集。像这样的重载Convert.ToInt32(Int32)可简化代码生成器,但不会影响运行时性能,因为调用可能会立即被JIT撤消
  • 为了保持一致:从2.0甚至从1.0开始,.net中就有一个IConvertible接口,该接口由Convert类使用。该接口要求使用ToInt32等方法。

代码生成(更多详细信息):在.NET 2.0时代生成代码的常用方法是System.CodeDOM,因为它提供了将同一代码生成器重用于多种语言的方法,最主要的是VB.NET和C#。在CodeDOM中,您无需知道给定表达式将调用哪种类型,您只需在目标对象表达式和方法名称上创建给定的CodeMethodCallExpression。另一方面,CodeDOM不支持许多强制转换运算符,例如C#作为运算符。

结果,通常很难知道CodeDOM中给定代码表达式的类型。这完全有意义,因为表达式可能涉及的许多方法也是所生成代码的一部分,因此在生成时是未知的。但是,在某些情况下,您需要将特定的表达式转换为给定的类型,例如System.Int32我可以想象这实际上是针对类型化数据集发生的,尽管我不确定100%。因为Convert.ToInt32存在,所以生成器不需要知道给定表达式的类型System.Int32当编译器编译生成的代码时,所有方法签名均可用,并且编译器可能会发现表达式的类型为,System.Int32并调用适当的重载。

另一方面,JIT编译器将检测到该方法Convert.ToInt32将仅返回其参数。但是由于该方法不是虚拟的,因此可以将方法主体插入到调用者代码中,而不必进行调用,Convert.ToInt32因为调用方法的开销将比方法主体高得多。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么Convert.ToInt32(1.0 / 0.00004)!=(Int32)(1.0 / 0.00004)

来自分类Dev

ToInt32()是C#中的扩展方法吗?特别是Convert.ToInt32()

来自分类Dev

NaN不按位排列:为什么ToInt32将NaN转换为零?

来自分类Dev

LINQ to Entities无法识别方法'Int32 ToInt32(Boolean)'

来自分类Dev

LINQ to Entities无法识别方法'Int32 ToInt32(System.String)'方法

来自分类Dev

为什么int32 / int64比int慢?

来自分类Dev

Convert Int32.Maximum+ valued number to int32

来自分类Dev

为什么char的Convert.ToInt32返回ASCII代码?

来自分类Dev

为什么char的Convert.ToInt32返回ascii代码?

来自分类Dev

为什么Color在字节上使用Int32?

来自分类Dev

为什么此Int32总和总是返回0?

来自分类Dev

为什么golang中的符文是int32而不是uint32的别名?

来自分类Dev

UInt32,Int32和Float32的字节类型是什么?

来自分类Dev

在Swift中要为int32 pixelFormat输入什么?

来自分类Dev

什么是int32的快速理想哈希函数?

来自分类Dev

为什么`Int32`在其源代码中使用`int`?

来自分类Dev

使用(int)和Convert.ToInt(32)将double转换为int不同的结果

来自分类Dev

C#中'(int)a','a as int'和Convert.ToInt32(a)之间的区别

来自分类Dev

C#中'(int)a','a as int'和Convert.ToInt32(a)之间的区别

来自分类Dev

当“不支持”操作时,为什么会有Convert.ToInt32(DateTime)方法?

来自分类Dev

为什么 .NET Core Convert.ToInt32 四舍五入奇数

来自分类Dev

为什么List <T>(Int32)的.Count的初始大小为0?

来自分类Dev

为什么我们不能使用GetConstructor找到Int32的默认构造函数?

来自分类Dev

为什么&运算符返回Int32而不是bool?

来自分类Dev

LINQ to Entities无法识别方法'Int32 Parse(System.String)'为什么?

来自分类Dev

为什么不能将Action <Int32>强制转换为Action <Object>?

来自分类Dev

当转换为Int32时,为什么字节的ASCII值不同?

来自分类Dev

为什么&运算符返回Int32而不是bool?

来自分类Dev

为什么float64允许NA,但int32不允许?

Related 相关文章

  1. 1

    为什么Convert.ToInt32(1.0 / 0.00004)!=(Int32)(1.0 / 0.00004)

  2. 2

    ToInt32()是C#中的扩展方法吗?特别是Convert.ToInt32()

  3. 3

    NaN不按位排列:为什么ToInt32将NaN转换为零?

  4. 4

    LINQ to Entities无法识别方法'Int32 ToInt32(Boolean)'

  5. 5

    LINQ to Entities无法识别方法'Int32 ToInt32(System.String)'方法

  6. 6

    为什么int32 / int64比int慢?

  7. 7

    Convert Int32.Maximum+ valued number to int32

  8. 8

    为什么char的Convert.ToInt32返回ASCII代码?

  9. 9

    为什么char的Convert.ToInt32返回ascii代码?

  10. 10

    为什么Color在字节上使用Int32?

  11. 11

    为什么此Int32总和总是返回0?

  12. 12

    为什么golang中的符文是int32而不是uint32的别名?

  13. 13

    UInt32,Int32和Float32的字节类型是什么?

  14. 14

    在Swift中要为int32 pixelFormat输入什么?

  15. 15

    什么是int32的快速理想哈希函数?

  16. 16

    为什么`Int32`在其源代码中使用`int`?

  17. 17

    使用(int)和Convert.ToInt(32)将double转换为int不同的结果

  18. 18

    C#中'(int)a','a as int'和Convert.ToInt32(a)之间的区别

  19. 19

    C#中'(int)a','a as int'和Convert.ToInt32(a)之间的区别

  20. 20

    当“不支持”操作时,为什么会有Convert.ToInt32(DateTime)方法?

  21. 21

    为什么 .NET Core Convert.ToInt32 四舍五入奇数

  22. 22

    为什么List <T>(Int32)的.Count的初始大小为0?

  23. 23

    为什么我们不能使用GetConstructor找到Int32的默认构造函数?

  24. 24

    为什么&运算符返回Int32而不是bool?

  25. 25

    LINQ to Entities无法识别方法'Int32 Parse(System.String)'为什么?

  26. 26

    为什么不能将Action <Int32>强制转换为Action <Object>?

  27. 27

    当转换为Int32时,为什么字节的ASCII值不同?

  28. 28

    为什么&运算符返回Int32而不是bool?

  29. 29

    为什么float64允许NA,但int32不允许?

热门标签

归档