.ToString()和.ToString(CultureInfo.CurrentCulture)

sen*_*ale 3 .net c# code-analysis tostring

例如,我必须.ToString(CultureInfo.CurrentCulture)在每个数字中使用字符串转换.我可以以某种方式覆盖,.ToString()以便我不会明确地获得字符串转换中的文化消息吗?

例如,现在我必须改变每一个

myNumValue.Count.ToString();
Run Code Online (Sandbox Code Playgroud)

myNumValue.Count.ToString(CultureInfo.CurrentCulture);
Run Code Online (Sandbox Code Playgroud)

Oli*_*ver 10

它没有任何意义,以取代ToString()ToString(CultureInfo.CurrentCulture)事业这正是ToString()已经这样做.

如果您没有将定义的文化(可能通过用户选择)放入代码中,只需坚持第一种方法即可.

  • 默认值是CurrentCulture,这就是人们省略它时会产生问题的原因. (4认同)

Nic*_*oiu 6

此规则的要点是为每个格式化和解析操作明确选择文化.如果你试图系统地交换实现来"欺骗"规则,那么你最终将彻底解决潜在的问题.正如Lonli-Lokli所建议的那样,如果您不喜欢使用culture参数读取ToString调用,则可能需要考虑使用扩展方法,但是您应该为每个支持的文化使用不同的扩展方法.例如:ToUIString() - > ToString(CultureInfo.CurrentCulture)和ToInvariantString() - > ToString(CultureInfo.InvariantCulture)

  • 我有一些非常有趣的问题,人们在将自定义文件格式写入磁盘时未指定ToString上的文化或string.Format调用.当一位新同事从印度和日本加入时,发生了各种各样的问题.当然,没有指定文化导致两个用户写出不同格式的数据,这当然是其他用户无法读取的.随着时间的推移,我学会了永远不要压制这个规则或寻求解决方法.我看到太多问题是由于没有这样做而造成的. (2认同)
  • 如果你使用客户端线程文化格式化或解析"常用"数据的代码进入生产环境会更糟.在许多情况下,您无法从存储的数据中推断出预期的文化(例如:是5月3日或3月5日的3/5/2001?),因此一旦您无法正确清理现有数据找到生产中的本地化错误.也就是说,我不一定强制使用"原始"ToString(文化),因为我有时更喜欢使用一种机制来让我换掉文化源.在这种情况下,我通常会添加自定义FxCop规则以防止使用ToString. (2认同)