default(int)和int = 0之间的区别

41

有人知道使用以下哪种方式声明整数变量是否存在差异:

var i = default(int)

对抗

var i = 0;

也许有些微小的性能差异或其他的不同之处?

感谢大家!


3
当然是没有区别的。编写易读的代码,大多数程序员肯定更喜欢显式地使用0。 - Hans Passant
6个回答

48

实际上,它们没有区别。根据MSDN

指定类型参数的默认值。引用类型将为null,值类型将为0。

int是值类型,因此表达式将解析为0。

我会使用显式的0分配,因为这样更易读。


感谢朋友的回答。 - Julito Avellaneda

34

这是 var i = default(int) 代码的IL:

IL_0001:  ldc.i4.0    
IL_0002:  stloc.0     // i

这里是 var i = 0; 代码的中间语言(IL):

IL_0001:  ldc.i4.0    
IL_0002:  stloc.0     // i

看起来这归结为个人偏好。


5
var i = new int() 的意思是创建一个新的整数变量i。 - Cihan Yakar

6
两者之间没有区别。 在 C# 中,为不同的情况提供了设施。这并不意味着在所有情况下都使用它们,而忽略它们背后的逻辑原因。 例如,在泛型中最常见的是 default,因为在泛型类和方法中,一个问题是当您事先不知道参数化类型 T 的以下内容时如何为其分配默认值。 尽管可以将其用于诸如 int 之类的基本类型,但不建议这样做,它存在的整个理由是其他的。 请使用后者,因为它更易读、更合乎逻辑。 您可能还想查看关于default此链接

3

从功能方面来看,没有区别,因为0int类型的默认值。

就性能而言,我相信default(int)在编译时会被替换为0,因此只可能在编译时产生轻微的性能损失,而不是运行时。


3

另一个因素可能是,如果编译器中的(默认)定义已更改,则您的项目可能会发生故障。


我认为int的默认值永远不会改变。 - Mephy
3
你说得没错。不过你是基于假设在讨论,没有科学的依据。我记得 C 语言默认值曾经是另一个数字——32767 ?! - codebased

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接