Null(在C#中)Vs Nothing(在vb.net中)

Red*_*ddy 14 c# vb.net

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)

我的理解是,这两个nullNothing是一样的.但上面的代码清楚地解释了它不是.

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)


Fab*_*bio 8

你选择了一个很小的竞标复杂的例子来测试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))

  • 这个答案清楚地表明VB'Nothing'和C#'null'是不同的概念.这些概念仅在应用于引用类型时才相同. (2认同)