2011-08-18 134 views
9

當引用當前實例成員時,是否有辦法在Visual Studio中強制使用this關鍵字?我可以在c#.NET中強制使用'this'關鍵字嗎?

例在構造函數中的錯誤:

class MyClass 
{ 
    public object Foo { get; set; } 
    public MyClass(object foo) 
    { 
     Foo = Foo; // this should of course be lowercase but it's easy to miss 
    } 
} 

此代碼可能會產生什麼地方以後臭名昭著'object reference not set to an instance of an object'例外。

如何使它工作,但仍然很容易錯過:

class MyClass 
{ 
    public object Foo { get; set; } 
    public MyClass(object foo) 
    { 
     Foo = foo; // Valid syntax but unclear. 
    } 
} 

這是有效的語法,但它很容易錯過。

語法我想視覺工作室執行:

class MyClass 
{ 
    public object Foo { get; set; } 
    public MyClass(object foo) 
    { 
     this.Foo = foo; // this is "safe". 
    } 
} 

如果此慣例執行我將不得不鍵入this.Foo = this.Foo創建同一類型的bug在第一個例子。

我總是使用關鍵字this,因爲它使我的生活更輕鬆,同時在c#和其他語言之間切換,所以根本沒有任何缺點。

+2

的Visual Studio確實,當你,如果你使用的FxCop –

+0

做第一個錯誤警告你,你說我不認爲這會讓你遇到的問題有什麼區別,我建議,而不是更改參數的名稱的東西像'bar',這樣你就不會有任何問題。 – atoMerz

回答

12

你可以簡單地通過啓用「將警告視爲錯誤」解決這個問題:

警告2分配到同一個變量作出;你的意思是分配別的東西嗎?

(CS1717如果要啓用它只是爲這一個)

編譯器已經告訴你這一點;您應該檢查警告(並且針對零警告)。

重新中間一個是不清楚:

Foo = foo; 

我不同意 - 這是非常清楚我的(除非你來自一個VB的背景和開發情況,失明)。

+2

他的意思是說,如果你的意思是「this.Foo」,那麼你永遠不會寫'Foo',這在第二個例子中就是你的意思。所以,他的方式將趕上一個 –

+0

確實,但你寫的它仍然是這是不正確 –

+0

@Oskar確定一個錯誤 - 編輯;更好? –

5

不,你不能改變這種語言的行爲。如果您使用ReSharper I 相信您可以告訴它標記這種事情 - 它可能不會出現在錯誤列表中,但在邊緣和整個文件健康的「指示燈」中。

我個人不傾向於過這樣的事情失去睡眠過多,因爲它是通常明顯,只要你考 - 我只能記得一個場景,它真的咬了我,這是當基本上,我在一個運行在Windows Phone 7上的類型初始化程序中結束了堆棧溢出(並非完全相同的情況,但又是一個套接字問題) - 基本上,這是困難的調試環境的混合體。

+0

我同意,我在單元測試時提出了這個想法,所以這真的不是什麼大問題。我只是認爲這將是一個「很高興有」 - 特點。 –

2

您可以使用的FxCop \ Visual Studio代碼分析

+2

有一個現有的編譯器警告;沒有自定義規則需要 –

+0

我的意思是,你可以創建自定義警告,通知將在訪問本地屬性,而無需「這個」 – sternr

+0

那去,如果你想成爲迂腐它的方式。 +1 –

3

您可以使用StyleCop生成一個警告,如果你不使用這個前綴自定義警告和錯誤。您可以通過以下方式將StyleCop作爲構建過程的一部分運行0123C

StyleCop帶有一堆默認規則,其中許多規則很糟糕,但是您可以編輯規則文件以使開發人員感受最佳。您還可以共享StyleCop文件,以便將更改立即複製到所有開發人員。

它是一個相當不錯的解決方案,免費,由微軟提供,如果你想出了設置,那麼你的開發人員將創造多少「整潔」代碼中的相應規則。您還可以在定義長度的「方法不應太長」的行上創建自定義規則。有很多東西可以玩。

此外,我想你可以設置警告視爲錯誤,但如果你確保你了StyleCop設置完全一樣,你希望他們。

+0

多麼棒的工具!我已經使用了FxCop,但這是一個很好的補充。 –

相關問題