警告 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];
如果您不想變更程式碼,可以將規則的嚴重性設定為
suggestion
或none
來予以停用。 如需詳細資訊,請參閱設定程式碼分析規則。若要完全停用程式碼分析,請在專案檔中將
EnableNETAnalyzers
設定為false
。 如需詳細資訊,請參閱 EnableNETAnalyzers。