CA1861:避免常數陣列作為引數
屬性 | 值 |
---|---|
規則識別碼 | CA1861 |
標題 | 避免常數陣列作為引數 |
類別 | 效能 |
修正程式是中斷或非中斷 | 不中斷 |
預設在 .NET 8 中啟用 | 建議 |
原因
常值常值陣列會透過一般調用或擴充方法調用傳遞至方法。
檔案描述
當重複呼叫時,不會重複使用傳遞為引數的常數陣列,這表示每次都會建立新的陣列。 如果所傳遞的陣列未在呼叫的方法內變動,請考慮將它擷取至 static readonly
欄位以改善效能。
注意
如果呼叫的方法會變動傳遞的陣列,或者如果您不確定方法是否會變動陣列,請勿將陣列擷取至 static readonly
欄位。 這樣做可能是一項重大變更。 在此情況下,最好改為隱藏警告。
如何修正違規
如果傳遞的陣列未在呼叫的方法內變動,請將常數陣列擷取至 static readonly
欄位。
下列範例顯示違反規則:
// A method argument
string message = string.Join(" ", new[] { "Hello", "world!" });
' A method argument
Dim message As String = String.Join(" ", {"Hello", "world!"})
下列範例示範如何藉由將 引數擷取至 static readonly
欄位,來修正此規則的違規情形。
private static readonly string[] array = new[] { "Hello" , "world!" };
private string GetMessage()
{
return string.Join(" ", array);
}
Private Shared ReadOnly array As String() = {"Hello", "world!"}
Private Function GetMessage() As String
Return String.Join(" ", array)
End Function
現在,陣列的值會在編譯階段解析,而不是在執行時間解析,讓程式碼更具效能。
隱藏警告的時機
如果下列情況,請隱藏此規則的違規:
- 調用只會執行一次。
- 陣列可能會在叫用的方法內變動,或者您不確定陣列是否會變動。
- 您並不擔心為每個調用建立常數陣列的效能影響。
隱藏警告
如果您只想要隱藏單一違規,請將預處理器指示詞新增至原始程式檔以停用,然後重新啟用規則。
#pragma warning disable CA1861
// The code that's violating the rule is on this line.
#pragma warning restore CA1861
若要停用檔案、資料夾或專案的規則,請在組態檔 中將其嚴重性設定為 。 none
[*.{cs,vb}]
dotnet_diagnostic.CA1861.severity = none
如需詳細資訊,請參閱 如何隱藏程式碼分析警告 。