【问题标题】:How do I convert a nullable int to a string that will be safe for computers in different locales?如何将可为空的 int 转换为对不同区域设置的计算机安全的字符串?
【发布时间】:2012-04-12 16:27:49
【问题描述】:

我正在将 nullable integer 转换为 string,Resharper 警告我使用 InvariantCulture。

shipment.ShipmentID.ToString()

稍后快速Alt-Enter, Enter,给了我这个:

shipment.ShipmentID.ToString(CultureInfo.InvariantCulture)

不幸的是,Resharper 不满意,并提出了同样的建议,这对我来说没有意义。

shipment.ShipmentID.ToString(CultureInfo.InvariantCulture, 
                                CultureInfo.InvariantCulture)

可空 int 上的 ToString() 不会构建,给我一个错误说明 没有重载方法 'ToString' 需要 1 个参数

不可为空的整数表现不同。

int requiredInt = 3;
// no Resharper or compiler warning
var stringFromRequiredInt = requiredInt.ToString(CultureInfo.InvariantCulture); 

我应该怎么做才能将nullable int 转换为string,这对于不同区域的计算机来说是安全的?

【问题讨论】:

  • 使用 shipping.ShipmentID.Value 时会发生什么?对于可空类型,我通常使用 .HasValue 布尔值检查空值,然后使用 .Value。

标签: c# int type-conversion locale nullable


【解决方案1】:

Nullable<T> 没有带参数的ToString() 重载; ReSharper 并没有完全正确地处理这种情况。

由于default(Nullable<int>).ToString() 返回string.Empty,您可以像这样让 ReSharper 开心:

shipment.ShipmentID.HasValue 
        ? shipment.ShipmentID.Value.ToString(CultureInfo.InvariantCulture) : ""

或者:

shipment.ShipmentID != null 
        ? ((int)shipment.ShipmentID).ToString(CultureInfo.InvariantCulture) : ""

【讨论】:

    【解决方案2】:

    检查此link

    您应该仅将不变文化用于需要与文化无关的结果的流程,例如系统服务。在其他情况下,它会产生可能在语言上不正确或在文化上不恰当的结果。

    更新:所以使用它的主要目的之一可能是例如'if' 语句比较。

    【讨论】:

      猜你喜欢
      • 2014-03-02
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多