C#NULL与vb.net有什么不同?
Console.WriteLine(Nothing = "") => True
Run Code Online (Sandbox Code Playgroud)
VS
Console.WriteLine(null==""); => False
Run Code Online (Sandbox Code Playgroud)
我的理解是,这两个null和Nothing是一样的.但上面的代码清楚地解释了它不是.
nullVB.NET 中C#的等价物是什么?
SSS*_*SSS 11
在你的代码中,VB猜测你正在比较Strings,因为其中一个操作数是a String.在String比较中,Nothing相当于空String "".然后进行值比较,返回True.
使用Is比较引用:
Console.WriteLine(Nothing Is "") '=> False
Run Code Online (Sandbox Code Playgroud)
你选择了一个很小的竞标复杂的例子来测试Nothingvb.net和nullc#之间的区别
从Visual Basic语言规范Nothing:
没有什么是特殊的文字; 它没有类型,可以转换为类型系统中的所有类型,包括类型参数.转换为特定类型时,它等效于该类型的默认值.
如果您从Microsoft文档中读取默认值表达式的描述,您会注意到Nothing在vb.net和default(T)C#中有类似的行为.
例如
Dim isSomething As Boolean = Nothing ' = False
Dim amount As Integer = Nothing ' = 0
Dim value As String = Nothing ' = null (notice not empty string!)
Run Code Online (Sandbox Code Playgroud)
证明字符串的默认值不是空字符串,因为这里留下了很多评论/答案
Dim value As String = Nothing
If value.Equals("") Then ' will throw NullReferenceException
End If
Run Code Online (Sandbox Code Playgroud)
与运算符的Nothing空字符串相比是vb.net的特例,因为对于字符串将评估为"""="Nothingnull
从Visual Basic语言规范关于类型的关系运算符String:
运算符使用二进制比较或文本比较返回比较两个值的结果.使用的比较由编译环境和Option Compare语句确定.二进制比较确定每个字符串中每个字符的数字Unicode值是否相同.文本比较基于.NET Framework上使用的当前文化进行Unicode文本比较.在进行字符串比较时,空引用等同于字符串文字"".
要在vb.net中检查字符串相等性,您应该使用String.Equals方法或Is运算符.
基于以上语言规范
我的理解是null和Nothing都是一样的.但上面的代码清楚地解释了它不是.
它们不一样,Nothing在vb.net中相当于default(T)在C#中
VB.NET中C#null的等价物是什么?
在C#中,您无法设置null值类型,因此对于vb.net中StringC#的等效引用类型()null将是Nothing.
例如(null == default(String))
| 归档时间: |
|
| 查看次数: |
6287 次 |
| 最近记录: |