我正在运行ReSharper的beta版本,它为以下代码提供警告:
int id;
// ...
DoSomethingWith(id.ToString());
警告出现在id.ToString()
调用上,它告诉我"明确指定一个字符串转换的文化"。我理解这个警告,我知道怎么修复 -- 只需将代码更改为更加繁琐的 id.ToString(CultureInfo.InvariantCulture)
。
但我的问题是:那是否有必要呢?我的意思是,显然,在使用像DateTime
(不同文化有不同的日期格式)和Double
(小数点使用不同字符)这样的类型时,指定文化很重要。但是Int32.ToString()
,至少在en-US和不变文化中,根本不会添加任何格式。没有逗号、没有小数点、没有美元符号,什么都没有。那么有什么需要根据文化而变化呢?
是否有一些文化实际上在调用无参数的Int32.ToString()
时添加某种格式?还是这是 ReSharper beta中的一个错误,这个警告真的不适用于Int32
(如果是这样,我会提交一个 ReSharper 的bug报告)?
id.ToString(CultureInfo.CurrentCulture)
。我建议为所有你关心的类型定义两个扩展方法:ToDisplayString()
和ToInvariantString()
。然后不再考虑你拥有的类型,只考虑你正在创建字符串的目的。自记录代码。 - ToolmakerSteve