CA1862:使用 'StringComparison' 方法多載來執行不區分大小寫的字串比較

屬性
規則識別碼 CA1862
標題 使用 『StringComparison』 方法多載來執行不區分大小寫的字串比較
類別 效能
修正程式是中斷或非中斷 不中斷
預設在 .NET 8 中啟用 建議

原因

程序代碼會先在一或兩個字串上呼叫ToLower()ToLowerInvariant()ToUpper()ToUpperInvariant() ,以不區分大小寫的方式比較兩個字元串。

檔案描述

當程式代碼呼叫 ToLower()ToLowerInvariant()ToUpper()ToUpperInvariant()時,會執行配置。 如果呼叫這些方法的唯一原因是執行不區分大小寫的字串比較或搜尋,則不需要配置。 相反地,您可以呼叫接受 並指定其中*IgnoreCase一個值的字串比較方法StringComparison

如何修正違規

拿掉對 、、 或 的呼叫ToLower(),並呼叫其中StringComparer一個方法,或接受StringComparison自變數的下列其中一個方法:ToUpperInvariant()ToUpper()ToLowerInvariant()

注意

  • 如果您將程式代碼變更為使用採用 StringComparison 自變數的多載,可能會導致行為發生細微變更。 如果您進行這項變更或接受 Visual Studio 燈泡建議,請務必進行徹底測試。
  • 如果字串不需要以文化敏感性的方式進行比較,請考慮傳遞 StringComparison.OrdinalIgnoreCase

範例

下列範例顯示違反規則:

string s1 = "aBc";
string s2 = "aBC";

int _ = s1.ToUpper().CompareTo(s2.ToUpper());
Dim s1 As String = "aBc"
Dim s2 As String = "aBC"

Dim i As Integer = s1.ToUpper().CompareTo(s2.ToUpper())

下列範例顯示修正違規的程式代碼:

string s1 = "aBc";
string s2 = "aBC";

int _ = StringComparer.CurrentCultureIgnoreCase.Compare(s1, s2);
Dim s1 As String = "aBc"
Dim s2 As String = "aBC"

Dim i As Integer = StringComparer.CurrentCultureIgnoreCase.Compare(s1, s2)

隱藏警告的時機

如果效能不相關,請安全地隱藏此規則的警告。

如果您使用 Entity Framework Core (EF Core),您應該針對您要藉由比較字串來查詢資料庫的案例,隱藏此規則。 如果您使用這類方法 String.Equals(String, StringComparison) 接受 StringComparison 自變數,EF Core 會擲回例外狀況,因為它不會將這類查詢轉譯為 SQL。 如需詳細資訊,請參閱 內建 .NET 字串作業的翻譯。

隱藏警告

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

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

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

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

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