【问题标题】:Why does Visual Basic allow Strings to be added to Integers in arithmetic statements?为什么 Visual Basic 允许在算术语句中将字符串添加到整数?
【发布时间】:2013-10-09 15:08:40
【问题描述】:

最近,我一直在我的编程课程(教 VB)中介绍数据类型,我遇到了一个有趣的情况。在尝试演示随机数生成器时,我遇到了这样一个事实,即我的代码允许在算术语句中清晰地使用字符串。虽然我觉得这样做很好,但我正在绞尽脑汁思考理由或实际导致这种情况发生的原因。

以下是我为测试而构建的一些代码示例:

Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    'Produces '56'
    MsgBox("5" + "6")
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    'Produces 11
    MsgBox(5 + 6)
End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    'Produces 11
    MsgBox("5" + 6)
End Sub

Private Sub RandomNumber(ByVal low As Integer, ByVal high As Integer)
    Randomize()
    MsgBox((high - low) * Rnd() + low)
End Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    'Produces Random Number between 5 - 6
    RandomNumber(5, "6")
End Sub

Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
    'Produces Random Number between 5 - 6
    RandomNumber("5", "6")
End Sub

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
    'Produces Random Number between 5 - 6
    RandomNumber(5, 6)
End Sub
End Class

如果是 IDE,我在 Windows 7 上使用 Visual Studio 2010 Ultimate。

【问题讨论】:

  • 至于理由,这是 VB 忠实于其作为“初学者”语言的根源,并且更加宽容。有些语言是强类型的,有些(例如Javascript)则更少。至少 Option Strict VB 为您提供了选择!
  • 将 Option Strict On 添加到代码文件的顶部。

标签: vb.net string visual-studio-2010 types


【解决方案1】:

我猜您已将 Option Strict 设置为 Off。

查看来自 MSDN (http://msdn.microsoft.com/en-us/library/9c5t70w2.aspx) 的关于 + 运算符的文档:

"一个表达式是数值数据类型,另一个是字符串

如果 Option Strict 为 On,则生成编译器错误。 如果 Option Strict 为 Off,则将 String 隐式转换为 Double 并添加。 如果 String 无法转换为 Double,则抛出 InvalidCastException 异常。”

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-03-08
  • 2010-11-13
  • 2011-12-04
  • 2014-10-07
  • 1970-01-01
  • 1970-01-01
  • 2014-08-16
  • 2016-07-08
相关资源
最近更新 更多