基本上,我在大多数日常编程任务中一直使用Integer.Parse
和CInt,但我对两者之间的区别有点困惑。
VB.NET中Integer.Parse
和CInt
之间有什么区别?
答案 0 :(得分:30)
CInt
比Integer.Parse
做得更多。
CInt
将首先检查它传递的是一个整数,然后简单地转换它并返回它。如果它是一个双倍,它将尝试转换它而不先将双精度转换为字符串。
请参阅CInt
和其他Type Conversion Functions
分数部分。当你转换一个 非整数值为整数类型, 整数转换函数 (CByte,CInt,CLng,CSByte,CShort, CUInt,CULng和CUShort)删除 小数部分并将值舍入到 最接近的整数。
如果小数部分恰好是0.5, 整数转换函数是圆的 它到最近的偶数整数。对于 例如,0.5轮到0,以及1.5和 2.5都是2到2.这有时被称为银行家的四舍五入及其 目的是弥补偏见 添加很多时可能会累积 这些数字在一起。
简而言之,它不仅仅是将字符串转换为整数,例如将特定的舍入规则应用于分数,短暂的不必要的转换等。
如果您正在做的是将字符串转换为整数,请使用Integer.Parse
(或Integer.TryParse
),如果您正在胁迫未知值(例如variant
或{从数据库{1}}到整数,使用object
。
答案 1 :(得分:4)
在某些示例代码中查看ILDASM,您可以看到CInt已转换为此调用:
<强> Microsoft.VisualBasic程序] Microsoft.VisualBasic.CompilerServices.Conversions :: ToInteger(字符串)强>
使用.NET Reflector,您可以提取这段代码:
Public Shared Function ToInteger(ByVal Value As String) As Integer
Dim num As Integer
If (Value Is Nothing) Then
Return 0
End If
Try
Dim num2 As Long
If Utils.IsHexOrOctValue(Value, (num2)) Then
Return CInt(num2)
End If
num = CInt(Math.Round(Conversions.ParseDouble(Value)))
Catch exception As FormatException
Throw New InvalidCastException(Utils.GetResourceString("InvalidCast_FromStringTo", New String() { Strings.Left(Value, &H20), "Integer" }), exception)
End Try
Return num
End Function
您可以在内部看到它调用 Conversions.ParseDouble 。
因此,正如Binary Worrier已经解释过的那样,使用Integer.Parse进行字符串强制,只使用CInt进行强制转换。
答案 2 :(得分:-1)
<Data Type>.Parse
方法用于从表示值的字符串中提取类型的值(例如,来自“2”的2)C<Data Type>
函数对表达式进行操作并返回变量子键入所需类型(例如CInt("2")
或CInt(SomeDouble + SomeDouble)
等)。
答案 3 :(得分:-1)
这是一个真正的区别: Integer.parse(“ 1.00”)将引发错误。 CInt(“ 1.00”)将起作用