CA1311:指定区域性或使用固定版本

属性
规则 ID CA1311
标题 指定区域性或使用固定版本
类别 全球化
修复是中断修复还是非中断修复 非中断
在 .NET 8 中默认启用

原因

调用 String.ToUpper()String.ToLower() 但不指定区域性。

规则说明

指定区域性或使用固定区域性,以避免在调用 ToUpperToLower 时隐式依赖当前区域性。 无论应用程序的区域性如何,使用固定区域性都会生成一致的结果。

如何解决冲突

不要调用无参数的 String.ToUpper()String.ToLower() 方法,而是调用 ToUpper(CultureInfo)ToUpperInvariant(),或者调用 ToLower(CultureInfo)ToLowerInvariant()

示例

以下代码片段演示了规则 CA1311 冲突:

string s = "hello";
s = s.ToLower();
Dim s As String = "hello"
s.ToLower()

以下代码片段修复了冲突:

string s = "hello";
s = s.ToLowerInvariant();
Dim s As String = "hello"
s.ToLowerInvariant()

何时禁止显示警告

如果确定 Thread.CurrentCulture 永远不会更改,则可以安全地禁止显示来自此规则的警告。

抑制警告

如果只想抑制单个冲突,请将预处理器指令添加到源文件以禁用该规则,然后重新启用该规则。

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

若要对文件、文件夹或项目禁用该规则,请在配置文件中将其严重性设置为 none

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

有关详细信息,请参阅如何禁止显示代码分析警告

另请参阅