我有一個函數返回調用此函數的對象的修改副本。我經常做這樣的事情:當功能結果未分配給變量時顯示警告
obj = obj.Foo(param);
不要問爲什麼,我只是不得不這樣做。但有時我(和其他人)忘了分配函數的結果,這樣做:
obj.Foo(param);
其反覆導致費時調試。
當函數結果未被賦值爲變量時,是否有任何顯示警告或錯誤的方法,當函數結果未被賦值爲 ?或者其他建議如何解決這個問題?
我有一個函數返回調用此函數的對象的修改副本。我經常做這樣的事情:當功能結果未分配給變量時顯示警告
obj = obj.Foo(param);
不要問爲什麼,我只是不得不這樣做。但有時我(和其他人)忘了分配函數的結果,這樣做:
obj.Foo(param);
其反覆導致費時調試。
當函數結果未被賦值爲變量時,是否有任何顯示警告或錯誤的方法,當函數結果未被賦值爲 ?或者其他建議如何解決這個問題?
這是完全合法的,往往需要不分配返回參數所以這將是錯誤的,有這方面的警告。 Henrik's答案使用out
參數是我也建議,以確保每次分配結果。
您可以啓用visual studio warings。
你甚至可以自定義要應用規則。
你應該看到警告的情況下,你沒有的功能分配給一個變量
,你也可以決定治療華林視爲錯誤
例子:
public static class MyClass
{
public static string GetStr()
{
return "";
}
public static void Main()
{
GetStr();
}
}
不是所有的VS版本,btw ... –
對於舊版本你可以使用如下: http:// msdn .microsoft.com/en-us/library/3y20cc1z%28v = VS.80%29.aspx –
不適用所有版本?我使用沒有「代碼分析」選項卡的VS 2008 Express。我找不到任何類似的東西。 – Grzes
我無法評論答案,缺乏stackoverflow學分。但是我同意克里斯的觀點,這是完全合法的,通常不希望分配從方法返回的值。偶爾也不合時宜。例如
public static int Square(this int myValue)
{
return myValue * myValue;
}
很明顯,調用這個方法時不分配它可能是一個錯誤。我認爲創建一個代碼分析規則,每次你沒有分配價值時都會發出警告,因爲Massimiliano建議的規則會比根本沒有規則更糟。在這種情況下,它會很高興能夠爲一個屬性應用到方法...
[MustAssign]
public static int Square...
您可以創建一個規則,爲的Massimiliano建議,但只有調用報警時,該方法被裝飾與屬性和從該方法返回的值未分配。不是一個微不足道的練習。
您可以使用Resharper來解決此問題;你需要與[Pure]
屬性來裝飾你的方法:
[Pure]
public static IList<T> RemoveItem<T>(this IEnumerable<T> thisList, T item)
{
var list = thisList.ToList();
list.Remove(item);
return list;
}
那麼當你調用它不分配的返回值,您將看到:
的[Pure]
屬性在Resharpers數據註釋定義:您需要將課程複製到您的項目中,以便您可以參考它們(許多非常有用的其他註釋)
「不要問爲什麼。」別擔心!給定的代碼片段表明了不可變的編碼風格(不是說這就是你使用的)。例如,如果您正在修改「DateTime」變量,則會使用相同的樣式。 'date = date.AddDays(1);' –
解決這個問題的方法不是首先犯錯。我們都這樣做,但這是唯一的答案。 –
顯然[ReSharper 6](http://www.jetbrains.com/resharper/whatsnew/)有一個*「不使用純方法的返回值」警告。 (我只在v5上,所以不能測試這個警告會適用於你的情況;我認爲它可能會。) – LukeH