Dan*_*don 10 vb.net syntax null
在VB.NET中,有什么区别
if foo is Nothing Then
doStuff()
End If
Run Code Online (Sandbox Code Playgroud)
和
if foo=Nothing Then
doStuff()
End If
Run Code Online (Sandbox Code Playgroud)
更新我收到以下答案:
foo is Nothing只需检查是否foo未分配给任何参考.foo = Nothing检查所持有的引用foo是否等于nothing.
运行三个语句后,
Dim foo as Object
Dim bar as Integer
foo = bar
Run Code Online (Sandbox Code Playgroud)
foo is Nothing计算结果为false并foo = Nothing计算结果为true.
但是,如果bar被声明为Object和未初始化,然后foo is Nothing和foo = Nothing两个评价为真!我认为这是因为它Integer是一种值类型并且Object是一种引用类型.
Kon*_*lph 11
这取决于类型.
对于值类型,仅Is 不起作用,=并且Nothing引用该类型的默认实例(即通过调用New T()给定类型获得的实例T).
对于参考类型,Is执行参考比较(与之相同object.ReferenceEquals(a, Nothing)).a = Nothing通常不起作用,除非 Operator =已明确为该类定义.
此外,如果Operator =已经正确实现,那么foo = Nothing并且foo Is Nothing应该产生相同的结果(但是对于任何其他值而言不是这样Nothing)而是foo Is Nothing更高效,因为它是一个编译器内在的同时Operator =将调用方法.
对于空值类型(即实例Nullable(Of T)),特别的规则:像所有其他运营商,=是解除由编译器为基础类型(注意在博客文章错误...).比较两个结果Nullables是因此没有Boolean,但Boolean?(注意?).但是,由于提升运营商的所谓"空传播" ,无论价值如何,这都将永远返回.引用Visual Basic 10语言规范(§1.86.3):Nothingfoo
如果是ether(sic!)操作数
Nothing,则表达式的结果是Nothingtyped 的值,作为结果类型的可空版本.
因此,如果用户想要将Nullable变量与之进行比较Nothing,则必须使用这样的foo Is Nothing语法,编译器再次生成特殊代码以使其工作(Visual Basic 10语言规范的§1.79.3).
向Jonathan Allen提示(正确)坚持说我错了; 向Jared Parsons提示,向我传递了Visual Basic 10规范的链接.
(以上假设Option Strict On时,你总是应该在是不是这样的情况下,结果会略有因为调用不同,foo = Nothing可以进行后期绑定调用.)
| 归档时间: |
|
| 查看次数: |
2584 次 |
| 最近记录: |