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

时间:2010-05-28 13:19:25

标签: c# non-nullable unassigned-variable

好奇。

如果你去:

string myString;

它的值为空。

但如果你去了:

int myInt;

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

由于

大卫

6 个答案:

答案 0 :(得分:27)

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

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

基本上,CLR用零擦除内存。

这也是default(SomeType)给出的任何类型的值。

答案 1 :(得分:5)

默认值为0

答案 2 :(得分:5)

int的默认值为0.

请点击此处查看每种类型的默认值的完整列表:http://msdn.microsoft.com/en-us/library/83fhsxwc.aspx

答案 3 :(得分:2)

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

答案 4 :(得分:2)

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

答案 5 :(得分:1)

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