.NET中的variable = 0和variable =之间有什么区别?

时间:2011-10-30 02:50:44

标签: .net vb.net

有什么区别:

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. 

3 个答案:

答案 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 用于引用类型,可空类型以及使用泛型的代码。