2013-07-24 77 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 
     } 
} 
相關問題