首页 新闻 会员 周边

string.Format的问题

0
[已解决问题] 解决于 2009-06-15 18:41

警告    73    CA1305 : Microsoft.Globalization : 由于 'string.Format(string, params object[])' 的行为可能因当前用户的区域设置不同而不同,请将 'ComEditBarCom.Page_Load(object, EventArgs)' 中的此调用替换为对 'string.Format(IFormatProvider, string, params object[])' 的调用。如果要向用户显示 'string.Format(IFormatProvider, string, params object[])' 的结果,请将“CultureInfo.CurrentCulture”指定为“IFormatProvider”参数;另外,如果软件将存储和访问此结果(例如,要将它保留到磁盘或数据库中),则指定“CultureInfo.InvariantCulture”。    E:\work\TomCMS\TomCMS.Web\Components\EditBar\ComEditBarCom.ascx.cs    18    TomCms.Web

代码分析说有上面的问题,到底有啥问题啊?

灰灰狼的主页 灰灰狼 | 初学一级 | 园豆:5
提问于:2009-06-15 08:50
< >
分享
最佳答案
0

string.Format在内部使用CultureInfo对字符串进行处理,如果不指定CultureInfo,会使用当前线程的CultureInfo。因此,在不同的区域设置中,同样的代码可能会产生不同的结果。如DateTime.ToString(IFormatProvider)在不同的区域设置中会产生完全不同形式的结果,string.Format的原理与之相同。

因此,代码分析建议将string.Format替换为带有IFormatProvider参数的重载形式,就是希望在国际化软件中,对于不同的区域设置也能产生相同的结果。当然,如果您的软件肯定不是国际化的,不使用IFormatProvider也无妨。

麒麟.NET | 老鸟四级 |园豆:3614 | 2009-06-15 11:20
其他回答(2)
0

楼上正解。

winzheng | 园豆:8797 (大侠五级) | 2009-06-15 12:26
0

最好是使用固定的格式化字符串,这样比较方便统一,呵呵

小丑鱼的海洋 | 园豆:182 (初学一级) | 2009-06-15 16:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册