簡體   English   中英

當函數結果未分配給變量時顯示警告

[英]Showing warning when function result is not assigned to variable

我有一個函數,它返回傳遞給這個函數的對象的修改副本。 我經常做這樣的事情:

obj = obj.Foo(param);

不要問為什么,我只是不得不問。 但有時,我(和其他人)忘記分配返回值,這樣做:

obj.Foo(param);

這會反復導致耗時的調試。

每次未將函數結果分配給變量時,有沒有辦法顯示警告或錯誤? 或有關如何解決此問題的任何其他建議?

您可以使用 out 參數,因此調用將如下所示:

obj.Foo(param, out obj);

您可以使用 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 Data Annotations 中定義:您需要將類復制到您的項目中,以便您可以引用它們(還有許多非常有用的其他注釋)

在此處輸入圖片說明

不分配返回參數是完全合法的並且通常是可取的,因此對其發出警告是錯誤的。 Henrik使用out參數答案也是我推薦的,以確保每次都分配結果。

您可以啟用 Visual Studio 警告。

在此處輸入圖片說明

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

如果您沒有將函數分配給變量,您應該會看到警告

您也可以決定將警告視為錯誤

例子:

  public static class MyClass
    {

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

在此處輸入圖片說明

在此處輸入圖片說明

我無法評論答案,缺少 stackoverflow 積分。 但我同意 Chris 的觀點,即不分配從方法返回的值是完全合法的,而且通常是可取的。 這有時也是不可取的。 例如

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

很明顯,調用此方法而不分配它可能是一個錯誤。 我認為創建一個代碼分析規則,在每次你沒有像 Massimiliano 建議的那樣分配值時發出警告,這比根本沒有規則更糟糕。 在這種情況下,能夠將屬性應用於方法會很好......

[MustAssign]
public static int Square...

您可以按照 Massimiliano 的建議創建規則,但僅在方法裝飾有屬性且未分配從方法返回的值時才調用警告。 雖然不是一個微不足道的練習。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM