2013-07-24 39 views
0

我有一个非常快速的问题关于使用两个变量的最佳方式。基本上我有一个枚举和一个int,我想在几个ifs中获得的值。我应该把它们声明外,如果是或内 - 考虑下面的例子:c#这是更好的方式来声明两个参数

e.g.a:

public void test() { 
    EnumName? value = null; 
    int distance = 0; 

    if(anotherValue == something) { 
     distance = 10; 
     value = getValue(distance); 
    } 
    else if(anotherValue == somethingElse) { 
     distance = 20; 
     value = getValue(distance); 
    } 


    if (value == theValueWeWant){ 
     //Do something 
} 

OR

e.g.2

public void test() { 

    if(anotherValue == something) { 
     int distance = 10; 
     EnumType value = getValue(distance); 
     if (value == theValueWeWant){ 
      //Do something 
    } 
    else if(anotherValue == somethingElse) { 
     int distance = 20; 
     EnumType value = getValue(distance); 
     if (value == theValueWeWant){ 
      //Do something 
    } 

} 

我只是好奇,这是最好的?或者如果有更好的方法?

+1

都是不同的场景的第一个例子需要如果在第二条语句之外的变量例如,if语句范围之外不需要变量 – Zaki

回答

0

如果您希望稍后使用那些,那么g代表第二种方法。这些变量一旦超出范围就会丢失。

即使您稍后不想使用它们,在if之前声明它们也是您应该做的事情,以避免代码重复。

0

这个问题纯粹是一个风格问题,因此没有正确答案,只有意见

C#的最佳实践一般是在使用它们的范围内声明的变量。这将指出第二个例子作为答案。尽管类型和名称是相同的,但它们表示不同的用途,应该限制在创建它们的区块中。

3

纯粹在维护方面,第一个代码块更好,因为它不会重复代码(假设“做某件事”在两种情况下都是相同的)。

就性能而言,差异应该可以忽略不计。第二种情况确实在编译的IL中生成了两倍的本地数,但JIT应该注意到它们的使用不会重叠并优化它们。第二种情况也会导致相同代码的两次排放(if (value == theValueWeWant) { ...),但这也不会导致任何显着的性能损失。

(虽然第二个例子的,这两方面导致编译的程序集是非常稍大,更多的IL并不总是意味着性能更差)

1

两个例子都做两个不同的东西:

如果您获得所需的值,版本1将运行相同的代码,其中即使您获得期望的值,版本2也可能运行不同的代码。

有很多可能的(微)优化你可以做。

例如,如果距离在的getValue(距离)只使用过的,你可以摆脱它完全:

/*Waring, micro-optimization!*/ 
public void test() { 

     EnumType value = getValue((anotherValue == something) ? 10 : (anotherValue == somethingElse) ? 20 : 0); 
     if (value == theValueWeWant){ 
    //Do something 
     } 
} 
相关问题