9

只是好奇。

如果你走的话:

string myString;

它的值为空。

但如果你去:

int myInt;

这个变量在 C# 中的值是多少?

谢谢

大卫

4

6 回答 6

27

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

的默认值为int0 - 对于任何类型,它本质上是由一个充满零的位模式表示的值。对于值类型,这等效于调用无参数构造函数,对于引用类型,这是 null。

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

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

于 2010-05-28T13:23:32.203 回答
5

int 的默认值为 0

于 2010-05-28T13:20:47.927 回答
5

int 的默认值为 0。

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

于 2010-05-28T13:21:02.093 回答
2

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

于 2010-05-28T13:23:06.603 回答
2

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

于 2010-05-28T13:23:51.773 回答
1

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

于 2010-05-28T13:24:57.660 回答