C#为什么要使用Convert.ToInt16(num)而不是ToInt16(num)?

4

在IT技术中,Convert.ToInt16(somenumber)ToInt16(somenumber)以及(ToInt16)somenumber有何不同?什么情况下我们需要使用其中之一?


5
ToInt16(somenumber)是一个将某个数值转换为16位有符号整数的函数。 - Andrey
Ya ToInt16(somenumber) ??? 没有头绪 - TalentTuner
下降的投票者请不要解释。(我不在乎 :)) - Alex Gordon
不是我点的踩,但我猜可能是以下原因之一: 没有ToInt16(somenumber)会编译错误,除非在定义自己的ToInt16方法的类中(你没有发布),(ToInt16)somenumber是从某种类型的somenumber向命名为ToInt16的类型进行转换。因此,很难真正理解你的问题。在这种情况下,问题通常会被踩。 - Rune FS
这对我来说看起来像VB.NET的术语。 - CesarGon
5个回答

4
< p > somenumber 的类型是什么?Convert.ToXXX 适用于需要转换数据库之类的数据,您可能不知道要从哪种类型进行转换,只知道数据是某种数字类型。

如果要将数字变量以不同的大小进行典型转换,则使用强制转换更佳。但您的强制转换语法有点错误,应该是 (Int16)somenumber(没有 "To")。

最后,ToInt16(somenumber) 在当前类(及其基类)中寻找函数或委托字段 ToInt16,因此它不太可能编译成功。


值得注意的是,如果这是VB,您可以将静态类包含为“Imports”指令,从而允许您以此方式访问静态函数。例如,如果在文件顶部有“Imports System.Convert”,则可以调用“ToInt16(num)”。 - Adam Robinson

4

Convert.Int16()System.Convert中的一个方法。它有多种重载形式,可以将不同类型转换为Int16

.ToInt16()可能是某个类定义的方法,但很可能你只是在引用完全相同的方法。请了解命名空间

但如果你有一个名为Unicorn的类,并且它有一个ToInt16()方法,那么你显然必须使用该方法,因为System.Convert中没有支持Unicorn的重载。


2
Convert是一个类,而不是命名空间,因此您无法使用using将其成员引入作用域(尽管这个功能已经被请求了很多次,例如 System.Math)。 - Ben Voigt
@Ben 是的,我刚刚意识到了这一点。 - NullUserException

3
我敢打赌这两个东西其实是一样的。也许你想说的是 Convert.ToInt16(somenumber)Int16.Parse(somenumber). 在这种情况下,方法签名是 Convert.ToInt16(Object somenumber)Int16.Parse(string somenumber)
Convert 将一个 object 转换为指定类型,而 Parse 则将一个 string 解析成指定类型。

2

Convert.ToInt16(somenumber) 就像其他人所说的,这是一种将某些类型(例如字符串)转换为 Int16 的方法。

ToInt1(somenumber) 我不知道这是什么。

(ToInt16)somenumber - 没有这样的东西,但有 (Int16)somenumber,它会将具有显式运算符重载且返回 Int16 的对象转换(请看这里)。


沙巴巴珍妮,我会保持安静的 :) - Itay Karo

0

在将浮点数转换为整数时,有一个重要的区别:

  • Convert.ToInt16 四舍五入到最近的整数(例如 1.6 -> 2)
  • 使用 (Int16)x 强制转换会截断小数部分(例如 1.6 -> 1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接