CA1870:使用快取的 'SearchValues' 實例
屬性 | 值 |
---|---|
規則識別碼 | CA1870 |
職稱 | 使用快取的 'SearchValues' 實例 |
類別 | 效能 |
修正程式是中斷或非中斷 | 不中斷 |
預設在 .NET 9 中啟用 | 建議 |
原因
IndexOfAny
或 ContainsAny
方法會以許多常數值呼叫,以便改用 。SearchValues
規則不會標幟使用最多五個值的呼叫,因為這些呼叫已經使用最佳實作。
檔案描述
使用快取 SearchValues<T> 實例比將值傳遞至 IndexOfAny
或 ContainsAny
直接更有效率。
如何修正違規
在欄位中建立SearchValues<T>和快取實例,然後將該實例改為傳遞至 static readonly
或 IndexOfAny
呼叫。ContainsAny
程式代碼修正,可自動執行此轉換。
範例
下列代碼段顯示 CA1870 的兩個違規:
static readonly char[] MyValues = new[] { 'a', 'b', 'c', 'x', 'y', 'z' };
static int IndexOfMyValues(ReadOnlySpan<char> text)
{
return text.IndexOfAny(MyValues);
}
static bool ContainsOnlyMyValues(ReadOnlySpan<char> text)
{
return !text.ContainsAnyExcept("abcxyz");
}
下列代碼段會修正違規:
private static readonly SearchValues<char> s_myValues = SearchValues.Create("abcxyz");
static int IndexOfMyValues(ReadOnlySpan<char> text)
{
return text.IndexOfAny(s_myValues);
}
static bool ContainsOnlyMyValues(ReadOnlySpan<char> text)
{
return !text.ContainsAnyExcept(s_myValues);
}
如果有多個具有相同值集合的呼叫 IndexOfAny
, s_myValues
應該重複使用。
隱藏警告的時機
如果效能不相關,則隱藏此警告是安全的。
隱藏警告
如果您只想要隱藏單一違規,請將預處理器指示詞新增至原始程式檔以停用,然後重新啟用規則。
#pragma warning disable CA1870
// The code that's violating the rule is on this line.
#pragma warning restore CA1870
[*.{cs,vb}]
dotnet_diagnostic.CA1870.severity = none
如需詳細資訊,請參閱 如何隱藏程式代碼分析警告。