有什么区别:
Dim intVal as integer
intVal = 0
和
intVal = nothing
我从MSDN上读到,没有任何东西将值设置为0:
来自MSDN:
Public Structure testStruct
Public name As String
Public number As Short
End Structure
Dim ts As testStruct, i As Integer, b As Boolean
ts = Nothing
' The preceding statement sets ts.name to "" and ts.number to 0.
i = Nothing
b = Nothing
' The preceding statements set i to 0 and b to False.
答案 0 :(得分:8)
对象引用通常不使用任何内容,如果将其分配给值类型,则使用默认值对其进行初始化。 在.NET世界中,默认值只是一个充满零的内存块。 因此,分配给nothing的整数将为0,分配给nothing的结构将是填充为零的结构。
空引用是一个特殊引用,它意味着没有引用,实际上表示为全零的指针。
在C#中,您可以使用default(TYPE)
获得相同的结果,它用于为您想要的任何内容指定零。
字符串是引用类型,如object,因此字符串不会分配给“”但是Nothing,字符串不是值类型。
Dim s as String
s = Nothing
Console.WriteLine Object.ReferenceEquals(s, Nothing) ' Will print true
Console.WriteLine Object.ReferenceEquals(s, "") ' Will print false
字符串仍然是引用类型,因此当您将其指定为Nothing时,您将引用设置为零。
答案 1 :(得分:3)
在.Net中,Integer是一种值类型,因此不能为空。
如果你创建一个integer类型的变量而不分配它,那么由于语言的工作方式,它将为0。
现代计算中一些最令人恼火/普遍存在的错误是由未初始化的变量引起的,因此.Net团队决定确保所有价值类型都不会遇到这个问题,这并不夸张。
虽然假设编译器/ JIT将这些变量解析为已知值(例如0表示整数或False表示布尔值),这是不好的做法,所以你应该总是使用你的第一个例子。
但要清楚地回答你的问题,没有区别,但最好使用第一个例子。
答案 2 :(得分:3)
Nothing 是一个特殊的文字,表示变量的默认值。从未分配时的值。布尔值为0,数字类型为0,DateTime的1月1日午夜0,引用类型引用的空引用,可为空的类型为Nothing,所有成员都为结构类型设置为Nothing。
我认为大多数程序员强烈倾向于将Integer显式设置为0,将Boolean设置为False(I确实),但使用 Nothing 是正确的。您无法避免将 Nothing 用于引用类型,可空类型以及使用泛型的代码。