分享方式:


CA1507:使用 nameof 取代字串

屬性
規則識別碼 CA1507
標題 使用 nameof 取代字串
類別 可維護性
修正程式是中斷或非中斷 不中斷
預設在 .NET 8 中啟用 建議

原因

string常值或常數,其符合包含方法之參數的名稱,或包含型別之屬性的名稱,會當做方法的引數使用。

檔案描述

規則 CA1507 會將常值當做方法或建構函式的 string 引數旗標,其中 nameof NameOf 在 Visual Basic 中) 運算式會新增可維護性。 如果符合下列所有條件,規則就會引發:

  • 引數是常 string 值或常數。

  • 引數會對應至 string 方法的 -typed 參數或正在叫用的建構函式(也就是說,呼叫月臺沒有涉及轉換)。

  • 任一:

    • 參數的宣告名稱是 paramName ,而常值的常數值 string 會符合叫用方法或建構函式之方法、Lambda 或本機函式的參數名稱。

    • 參數的宣告名稱是 propertyName ,而常值的常數值 string 符合叫用方法或建構函式之型別的屬性名稱。

規則 CA1507 可改善未來可能重新具名引數的程式碼可維護性,但 string 常值錯誤地不會重新命名。 藉由使用 nameof ,當參數透過重構作業重新命名時,符號將會重新命名。 此外,編譯器會攔截參數名稱中的任何拼字錯誤。

如何修正違規

若要修正違規,請將常值取代 string nameof NameOf 在 Visual Basic) 運算式中。 例如,下列兩個程式碼片段會顯示違反規則,以及如何修正它:

public Book(string title)
{
    // Violates rule CA1507
    Title = title ?? throw new ArgumentNullException("title", "All books must have a title.");
}
public Book(string title)
{
    // Resolves rule CA1507 violation
    Title = title ?? throw new ArgumentNullException(nameof(title), "All books must have a title.");
}

提示

Visual Studio 中有一個程式碼修正程式碼可供此規則使用。 若要使用它,請將游標放在常值上 string ,然後按 Ctrl + 。 (句號)。 從所呈現的選項清單中,選擇 [使用 nameof] 表示符號名稱

Code fix for CA1507 - use nameof to express symbol names

隱藏警告的時機

如果您不擔心程式碼的可維護性,則隱藏此規則的違規是安全的。

隱藏警告

如果您只想要隱藏單一違規,請將預處理器指示詞新增至原始程式檔以停用,然後重新啟用規則。

#pragma warning disable CA1507
// The code that's violating the rule is on this line.
#pragma warning restore CA1507

若要停用檔案、資料夾或專案的規則,請在組態檔 中將其嚴重性設定為 。 none

[*.{cs,vb}]
dotnet_diagnostic.CA1507.severity = none

如需詳細資訊,請參閱 如何隱藏程式碼分析警告

另請參閱