警告 CA1831:使用 AsSpan 作為字串,不要使用透過 Range 產生的索引子

從 .NET 5 開始,系統會預設啟用 .NET 程式碼分析器規則 CA1831。 當任意程式碼在字串上使用透過 Range 產生的索引子,但未使用任何複本時,就會產生建置警告。

變更描述

從 .NET 5 開始,.NET SDK 包含 .NET 原始程式碼分析器。 這些規則中有些會預設啟用,包括 CA1831。 如果您的專案包含違反此規則的程式碼,且設定為將警告視為錯誤,則此項變更會中斷您的組建。

規則 CA1831 會尋找在字串上使用透過 Range 產生的索引子,但未使用任何複本的執行個體。 如果透過 Range 產生的索引子直接用在字串上來產生隱含轉換,那麼就會建立不必要的字串要求部分複本。 例如:

ReadOnlySpan<char> slice = str[1..3];

CA1831 建議改為在字串的「範圍」上使用透過 Range 產生的索引子。 例如:

ReadOnlySpan<char> slice = str.AsSpan()[1..3];

導入的版本

5.0

  • 如要修正您的程式碼並避免不必要的配置,請在使用透過 Range 產生的索引子之前呼叫 AsSpan(String)AsMemory(String)。 例如:

    ReadOnlySpan<char> slice = str.AsSpan()[1..3];
    
  • 如果您不想變更程式碼,可以將規則的嚴重性設定為 suggestionnone 來予以停用。 如需詳細資訊,請參閱設定程式碼分析規則

  • 若要完全停用程式碼分析,請在專案檔中將 EnableNETAnalyzers 設定為 false。 如需詳細資訊,請參閱 EnableNETAnalyzers

受影響的 API