【问题标题】:CA1305: int.Parse(String)CA1305:int.Parse(字符串)
【发布时间】:2009-06-12 02:32:26
【问题描述】:

我收到 CA1305 警告。

Microsoft.Globalization:因为 'int.Parse(string)' 的行为可能因 当前用户的区域设置, 替换这个调用 '_Default.CalculateImageButton_Click(对象, ImageClickEventArgs)' 调用 'int.Parse(字符串, IFormatProvider)'。如果结果 'int.Parse(字符串, IFormatProvider)' 将显示到 用户,指定 'CultureInfo.CurrentCulture' 作为 “IFormatProvider”参数。 否则,如果结果将是 通过软件存储和访问,例如 就像它被持久化到磁盘或 一个数据库,指定 'CultureInfo.InvariantCulture'。

如果我在解析 Int32 时省略指定区域性,究竟会出现什么问题?

【问题讨论】:

    标签: asp.net visual-studio cultureinfo


    【解决方案1】:

    这意味着当您从数据文件或数据库记录中读取“1,234”,然后尝试通过 Parse 将其转换为 Int 时,您将在美国得到 1234,在德国得到 1。该警告提供了很好的建议 - 如果您正在与用户交互,请指定 CurrentCulture(感谢 Andrew!),如果您正在与文件系统或数据库(或任何!用户)交互,请使用 InvariantCulture

    【讨论】:

    • 我相信 CurrentUICulture 仅用于提取字符串资源。对于所有格式,您应该使用 CurrentCulture(注意缺少 UI)。否则,某些文化会导致您的代码抛出异常。请参阅code.google.com/p/dotnetopenid/issues/detail?id=60 了解由此引起的错误示例。
    【解决方案2】:

    如果你解析一个整数,它可能有千位分隔符,可以是“,”或“。”取决于语言环境。

    【讨论】:

      猜你喜欢
      • 2012-08-24
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 1970-01-01
      • 1970-01-01
      • 2015-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多