2011-08-02 57 views
5

我有一個函數返回調用此函數的對象的修改副本。我經常做這樣的事情:當功能結果未分配給變量時顯示警告

obj = obj.Foo(param); 

不要問爲什麼,我只是不得不這樣做。但有時我(和其他人)忘了分配函數的結果,這樣做:

obj.Foo(param); 

其反覆導致費時調試。

當函數結果未被賦值爲變量時,是否有任何顯示警告或錯誤的方法,當函數結果未被賦值爲 ?或者其他建議如何解決這個問題?

+1

「不要問爲什麼。」別擔心!給定的代碼片段表明了不可變的編碼風格(不是說這就是你使用的)。例如,如果您正在修改「DateTime」變量,則會使用相同的樣式。 'date = date.AddDays(1);' –

+2

解決這個問題的方法不是首先犯錯。我們都這樣做,但這是唯一的答案。 –

+1

顯然[ReSharper 6](http://www.jetbrains.com/resharper/whatsnew/)有一個*「不使用純方法的返回值」警告。 (我只在v5上,所以不能測試這個警告會適用於你的情況;我認爲它可能會。) – LukeH

回答

4

你可以使用一個out參數,因此調用看起來像這樣:

obj.Foo(param, out obj); 
+6

這會破壞編寫像'obj = obj.Foo(param)這樣的語句的可能性。 .Bar(parem).Baz(parum);' – Atreys

+0

我已將此解決方案考慮在內。我不使用上面的鏈條,但我不確定我永遠不會使用它們。我也在尋找更復雜的東西:D 你說服我這個方法:) – Grzes

2

這是完全合法的,往往需要不分配返回參數所以這將是錯誤的,有這方面的警告。 Henrik's答案使用out參數是我也建議,以確保每次分配結果。

2

您可以啓用visual studio warings。

enter image description here

你甚至可以自定義要應用規則。

你應該看到警告的情況下,你沒有的功能分配給一個變量

,你也可以決定治療華林視爲錯誤

例子:

public static class MyClass 
    { 

     public static string GetStr() 
     { 
      return ""; 
     } 
     public static void Main() 
     { 
      GetStr(); 
     } 
    } 

enter image description here

enter image description here

+0

不是所有的VS版本,btw ... –

+0

對於舊版本你可以使用如下: http:// msdn .microsoft.com/en-us/library/3y20cc1z%28v = VS.80%29.aspx –

+0

不適用所有版本?我使用沒有「代碼分析」選項卡的VS 2008 Express。我找不到任何類似的東西。 – Grzes

0

我無法評論答案,缺乏stackoverflow學分。但是我同意克里斯的觀點,這是完全合法的,通常不希望分配從方法返回的值。偶爾也不合時宜。例如

public static int Square(this int myValue) 
{ 
    return myValue * myValue; 
} 

很明顯,調用這個方法時不分配它可能是一個錯誤。我認爲創建一個代碼分析規則,每次你沒有分配價值時都會發出警告,因爲Massimiliano建議的規則會比根本沒有規則更糟。在這種情況下,它會很高興能夠爲一個屬性應用到方法...

[MustAssign] 
public static int Square... 

您可以創建一個規則,爲的Massimiliano建議,但只有調用報警時,該方法被裝飾與屬性和從該方法返回的值未分配。不是一個微不足道的練習。

3

您可以使用Resharper來解決此問題;你需要與[Pure]屬性來裝飾你的方法:

[Pure] 
public static IList<T> RemoveItem<T>(this IEnumerable<T> thisList, T item) 
{ 
    var list = thisList.ToList(); 
    list.Remove(item); 
    return list; 
} 

那麼當你調用它不分配的返回值,您將看到:

enter image description here

[Pure]屬性在Resharpers數據註釋定義:您需要將課程複製到您的項目中,以便您可以參考它們(許多非常有用的其他註釋)

enter image description here