2013-06-04 240 views
5

我喜歡正確命名的變量,但在某些情況下很難做到。一個方法中具有相同名稱的多個變量

所以,如果我的對象實現IDisposable然後我可以使用:

using (var whatever = new Whatever()) { //... } 

但它是罕見的情況,所以我找到了另一種方式來處理它 - 匿名塊(不知道如何正確調用):

//... 
{ 
    var whatever = new Whatever(); 
    //... 
} 
//... 
if (condition) 
{ 
    var whatever = new Whatever(); 
} 

這是一個很好的方法嗎?是否有任何陷阱或普遍認爲它會降低代碼的可讀性?

+2

即使我已經閱讀了問題,什麼它會被用於,而不是什麼它是從宣佈後,爲什麼不命名變量? –

+2

爲什麼你不能只是覆蓋'無論'? 'var whatever = new(); ... whatever = new(); ...' – SimpleVar

+4

通常情況下,我會將方法分成不同的方法,至少在很多情況下。 –

回答

3

基本上,如果編譯器沒有抱怨,並且你的代碼是可讀的並且易於理解,那沒有什麼問題。

例如:

foreach (var foo in foos) 
{ 
    var task = new FooTask(foo); 
    task.Run(); 
} 
foreach (var bar in bars) 
{ 
    var task = new BarTask(bar); 
    task.Run(); 
} 

這實際上是(在我看來)稍微容易閱讀比

foreach (var foo in foos) 
{ 
    var task1 = new FooTask(foo); 
    task1.Run(); 
} 
foreach (var bar in bars) 
{ 
    var task2 = new BarTask(bar); 
    task2.Run(); 
} 
+1

'var task = foo?新的FooTask():新的BarTask(); task.Run();在這種情況下,似乎對我來說是最易讀的。但是如果它們不實現一些'IRunnableTask'接口或類似的東西,那麼這是不可能的。 – SimpleVar

+1

@YoryeNathan是的,我同意,我只是試圖提出一個適合OP的問題的案例。我用'foreach'塊更新了我的答案,這說明了這點好一點。 –

+0

我從不使用枚舉變量名稱,因爲我認爲在命名轉換中也是不好的做法。所以在這種情況下,更好的名字將會更好地發現可變的使用目的。但在我的情況下,變量變得奇怪而且太長了 – Vladimirs

1

我只是測試你的代碼,因爲通常情況下,用VSCodeAnalysis和r#和StyleCop的呼吸在我的脖子上,我會期待很多警告。但不是。他們都保持沉默。所以它似乎沒有反對任何微軟編碼指南。

但是:如果您爲了避免由於變量名造成的編譯錯誤而需要創建多餘的匿名塊,它不再容易和簡單。基本上,你隱藏了編譯器,隱藏永遠不會解決問題。從我的角度來看,如果爲每個變量選擇一個精確的名稱(將其命名爲類型並不是很好),那麼這將會是更好的代碼,並刪除匿名塊。

遵循KISS原則:「保持簡單,愚蠢」。

1

我會對這種方法持謹慎態度;它可能會妨礙可讀性和可調試性。過去我曾經遇到過兩種情況,當我以爲我在觀看兩個不同的變量時,我有兩個斷點。

C#強加的有助於確保您的方法不會不一致地使用名稱的規則很複雜。如果您有興趣瞭解更多關於他們,請參閱:

http://blogs.msdn.com/b/ericlippert/archive/tags/simple+names/

相關問題