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

前端之家收集整理的这篇文章主要介绍了vb.net – 在Visual Basic.Net中添加零到零之间的区别?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为什么会有所不同?!
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的正确默认值.

功能,而不是错误.

猜你在找的VB相关文章