未分配的非可变变量(C#)的值

只是好奇。

如果你走的话:

string myString; 

它的值为null。

但是如果你去:

 int myInt; 

C#中此变量的值是多少?

谢谢

大卫

首先,请注意,这仅适用于字段,而不适用于局部变量 – 在分配之前无法读取,至少在C#中。 实际上,如果你设置了适当的标志,CLR会将堆栈帧初始化为0 – 我相信它是默认的。 但它很少被观察到 – 你必须经历一些难以理解的黑客攻击。

int的默认值为0 – 对于任何类型,它基本上是由满位零的位模式表示的值。 对于值类型,这相当于调用无参数构造函数,对于引用类型,这是null。

基本上CLR用零擦除内存清理。

这也是任何类型的default(SomeType)

int的默认值为0

int的默认值为0。

有关每种类型的默认值的完整列表,请参阅此处: http : //msdn.microsoft.com/en-us/library/83fhsxwc.aspx

下面是C#中值类型的默认值表: http : //msdn.microsoft.com/en-us/library/83fhsxwc.aspx引用类型默认值通常为null。

String是引用类型。 Int是值类型。 引用类型只是指向堆的堆栈上的指针,它可能包含也可能不包含值。 值类型只是堆栈上的值,但必须始终设置为某个值。

类型T的单元化变量的值始终为default(T) 。 对于所有引用类型,这是null,对于值类型,请参阅@Blorgbeard发布的链接(或编写一些代码来检查它)。