加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

vb.net – 在Visual Basic.Net中添加零到零之间的区别?

发布时间:2020-12-17 00:32:08 所属栏目:大数据 来源:网络整理
导读:为什么会有所不同?! Public Class Form1 Public Function MyFunction() As Integer? Return Nothing End Function Private Sub Form1_Load(sender As Object,e As EventArgs) Handles MyBase.Load Dim o As Object = Me MsgBox(TypeName(Me)) ' Form1 MsgB
为什么会有所不同?!
Public Class Form1
 Public Function MyFunction() As Integer?
    Return Nothing
 End Function

 Private Sub Form1_Load(sender As Object,e As EventArgs) Handles MyBase.Load
    Dim o As Object = Me
    MsgBox(TypeName(Me)) ' Form1
    MsgBox(TypeName(o))  ' Form1
    MsgBox(TypeName(Me.MyFunction())) ' Nothing
    MsgBox(TypeName(o.MyFunction()))  ' Nothing
    ' but
    MsgBox(TypeName(Me.MyFunction() + 0)) ' Nothing
    MsgBox(TypeName(o.MyFunction() + 0))  ' Integer
 End Sub
End Class
使用Option Strict On是一种避免这种意外的好方法.你会得到一个“你想要做什么?”来自编译器的错误消息.

但是关闭它,这些是由DLR(动态语言运行时)执行的有效语句.哪个能够评估这样的后期绑定表达式.但是它有像Integer这样的可空类型的问题.它需要处理值的盒装版本.这简直就是没什么.并且没有任何类型信息与之相关. DLR没有什么可以看到这开始是一个可以为空的整数生命,因为它知道它可能是一个Nothing的字符串.

编译器也无法帮助,它不能发出任何代码使表达式遵循正常的评估规则.它只知道有一些功能,它不知道哪个,其名称是“MyFunction”,不知道它返回什么样的值.它将降压传递给DLR以对其进行排序.

因此,DLR只是支持它.它提出“不知道”0 = 0.鉴于它确实有0的类型信息.它是一个整数,所以它试图将左运算符解释为整数.哪个是有效的,Nothing是Integer的正确默认值.

功能,而不是错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读