明确指定转换字符串的文化环境

8

我有一个循环,在其中调用i变量的ToString()方法,i是一个整数变量。

for (int i = 1; i <= n; i++)
{
    @Html.ActionLink(@i.ToString(), "Index")
}

Resharper提醒我应该:

显式指定字符串转换中的区域性。

为什么要这样做?

将int转换为字符串有多少种方法?

我原本以为只有一种方法。


1
1000000 可以写成 1 000 000。 - erikH
可能是Is Int32.ToString() culture-specific?的重复问题。 - Dan Puzey
2个回答

7

有不同的符号分组方法,比如 1000; 1 000 和 1'000。 此外,不同国家使用不同的数字。

中文数字也有其独特的形式。

您可以在控制面板 -> 区域和语言 -> 格式 -> 高级设置 -> 标准数字中看到不同的数字。(Win 7)


2
因此,其他重载使用当前区域设置,因此,如果Thread.CurrentCulture设置适当,则转换将按预期工作。这是其中一个警告,如果您已经有了良好的i18n / l10n测试,则可能希望禁用它。 - akton

1
通常,明确指定您要使用当前区域设置还是处理数据的区域设置不变是一个好习惯。问题在于,如果您正在处理仅由您的软件处理而不以任何方式呈现给用户的数据(例如数据库标识符),那么如果数据在不同的计算机上不同,您可能会遇到问题。
例如,在具有某些区域设置的计算机上序列化数据库标识符,然后在具有不同区域设置的计算机上反序列化,这种情况下它可能是不同的!如果您明确指定正在处理的字符串是区域设置不变的,则无论在计算机上设置了什么区域设置,它始终都是相同的。
您可以在MSDN代码分析文档中阅读更多关于此主题的信息: CA1305:指定IFormatProvider

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接