拿下面的代码:
Sub Main() Dim i As Integer Dim b As Boolean i = 1 b = i i = b Console.WriteLine(i) i = Convert.ToInt32(b) Console.WriteLine(i) End Sub
这将打印以下内容:
-1 1
为什么是这样?
(只是一个笑话:)你可以得到0太…
Int32.TryParse("True",i) Console.WriteLine(i)
你看到的是一些遗留代码显示它的头。
原文链接:https://www.f2er.com/vb/256213.html事情的核心是VT_BOOL类型。 Visual Basic 6.0使用VT_BOOL类型(AKA VARIANT_BOOL)作为其布尔值。对于VARIANT_BOOL为True,其值为VARIANT_TRUE,其值为-1。在转换到.NET时,决定使用Visual Basic转换例程将布尔值转换为整数值时,Visual Basic 6.0语义将保留在返回值上;它将是-1。
第一个隐式转换发生在b = i行。在底层,这做一个从整数到布尔的隐式转换。任何非零值都被视为true,因此结果值为true。
但是,以下代码行是隐式转换为整数类型。
i = b
在引擎盖下,使用一个Visual Basic转换程序(CType或CInt)将值转换为整数。因为Visual Basic语义正在播放,返回的值为-1。
下一个有趣的行是Convert.ToInt32()行。这是使用.NET转换程序,不使用Visual Basic语义。相反,它返回一个真正的布尔值为1的底层BCL表示。