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] 表示符號名稱 。
隱藏警告的時機
如果您不擔心程式碼的可維護性,則隱藏此規則的違規是安全的。
隱藏警告
如果您只想要隱藏單一違規,請將預處理器指示詞新增至原始程式檔以停用,然後重新啟用規則。
#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
如需詳細資訊,請參閱 如何隱藏程式碼分析警告 。