2010-07-08 27 views

回答

36
int xyz = 0; 

为什么让人们觉得超过必要? default对于泛型代码非常有用,但在这里它不会添加任何内容。你也应该考虑如果你在正确的地方初始化它,并且有一个有意义的价值。有时你会看到堆栈变量的代码如下:

int xyz = 0; 

if(someCondition) 
{ 
    // ... 
    xyz = 1; 
    // ... 
} 
else 
{ 
    // ... 
    xyz = 2; 
    // ... 
} 

在这种情况下,您应该延迟初始化,直到您具有实际值。请执行以下操作:

int xyz; 

if(someCondition) 
{ 
    // ... 
    xyz = 1; 
    // ... 
} 
else 
{ 
    // ... 
    xyz = 2; 
    // ... 
} 

编译器确保您不使用未初始化的堆栈变量。在某些情况下,你必须使用无意义的值,因为编译器无法知道代码永远不会执行(由于异常,调用Exit等)。这是规则的例外(不是双关语)。

+2

+1为什么让人们觉得超过必要? – Salil 2010-07-08 06:16:57

+2

思考超过必要:xyz = 0意味着x = 0或y = 0或z = 0(有时候?) – TNi 2010-07-08 06:19:12

+2

我完全同意马修。但是对于他(简单的)局部变量初始化的例子,我更喜欢 “int x = someCondition?1:2;” ,因为它更紧凑,清楚地表明它是一个单值赋值。 只要有可能,局部变量应该在使用前直接创建。 – rotti2 2010-07-08 07:52:08

5

你的代码没有性能差异。清楚地看到使用int xyz = 0;

+2

性能不是唯一的重要指标。 – Incognito 2010-07-08 07:15:08

9

default运算符的用途是为您提供类型的默认值,但主要是为了让泛型对于声明为泛型类型参数的值具有有效值而添加的。

我没有确凿的证据,但我怀疑编译器会针对您的具体情况发出相同的代码。

然而,这里有一个合法使用的default

public T Aggregate<T>(IEnumerable<T> collection, Func<T, T, T> aggregation) 
{ 
    T result = default(T); 

    foreach (T element in collection) 
     result = aggregation(result, element); 

    return result; 
} 

没有default,上面的代码将需要一些黑客为了正确地编译和功能。

因此,使用第一个,将其设置为0

2

int xyz = default(int); 我喜欢这种方式时使用泛型bcoz它让您灵活地获得默认的任何类型,你正在与。

int xyz = 0;另一方面,这很容易和快速,显然在通用情况下不起作用。

两者都有自己的优点和缺点..

问候,

14

这取决于你想要达到的目标。

我宁愿

int xyz = 0; 

,因为我相信它是更具可读性,而不是混乱。

default关键字大多适用于泛型。

3

鉴于发出CIL是相同的(你

IL_0001: ldc.i4.0 
    IL_0002: stloc.0 
在这两种情况下

),规则是要选择你感觉更好通信代码的意图之一。通常,感觉问题是主观的,难以确定;然而,在这种情况下,我是代码审查人员,我将不得不提出一个非常有吸引力的理由来接受看起来完全是多余的使用default()

0

INT XYZ = 0是moreclear,defaut通常与泛型

0

最好使用是

int xyz; 

因为你不能访问到未初始化的变量。

相关问题