【问题标题】:Convert nullable numeric into string将可为空的数字转换为字符串
【发布时间】:2012-07-13 09:42:21
【问题描述】:

我想将一个可以为空的数字转换成一个字符串维护空值。这就是我正在做的:

int? i = null;
string s = i == null ? null : i.ToString();

有更短的吗?

【问题讨论】:

  • 不要认为实际上有什么更短的
  • 除了扩展方法之外,不要看到它变得更短。

标签: c# type-conversion


【解决方案1】:

我们也可以使用 System.Convert 即

int? i = null;
string s = Convert.ToString(i); // it gives null if i is null.

如前所述,我们还可以使用空条件运算符

string s = i?.ToString();

【讨论】:

    【解决方案2】:

    您可以为此创建一个扩展方法:

    public static string ToStringOrNull<T>(this Nullable<T> nullable) 
    where T : struct {
      return nullable.HasValue ? nullable.ToString() : null;
    }
    

    用法:

    var s = i.ToStringOrNull();
    

    更新

    从 C# 6 开始,您可以使用更方便的null-conditional operator

    var s = i?.ToString();
    

    【讨论】:

    • 哎呀..这次我很抱歉 - 只是想创建我的答案的更通用版本:) 我没有复制你的!
    • 我需要十进制类型的 formatProvider 参数,因此删除了通用版本以专门针对十进制扩展作为我在 stackoverflow.com/a/47835010/1830909 中的答案,不幸的是不能在评论中写方法,必须写为新答案,你呢有更好的主意吗?
    【解决方案3】:

    我需要十进制类型的 formatProvider 参数,因此删除了通用版本以专门用于十进制扩展,如下所示:

    public static string ToStringOrNull(this Nullable<decimal> nullable, string format = null)        
    {
        string resTmp = "";
        if (nullable.HasValue)
        {
            if (format != null)
            {
                resTmp = nullable.Value.ToString(format);
            }
            else
            {
                resTmp = nullable.ToString();
            }
        }
        else
        {
            resTmp = "";
        }
        return resTmp;
    }
    

    【讨论】:

    • @Jordão 是的,我的数据库表中有一些可以为空的十进制字段,因此在实体框架模型中定义为可以为空的十进制。为了在 Web 应用程序视图中使用它们,必须将它们转换为字符串并作为可空类型,我不能使用标准的 ToString() 方法。
    【解决方案4】:

    我认为

    string s = i?.ToString();
    

    更短。

    【讨论】:

    • 是的! +1。但是您必须明白,在该操作符以该语言可用之前,该问题已被提出并得到回答。不过,我也更新了我的答案。
    • 是的,我知道这个问题早于运营商的可用性。只是想我会把它扔在那里,以防它对任何人有帮助。
    【解决方案5】:

    你可以写一些扩展方法:

    public static string ToNullString(this int? i)
    {
       return i.HasValue ? i.ToString() : null;
    }
    

    使用会更简单:

    string s = i.ToNullString();
    

    或通用版本:

    public static string ToNullString<T>(this Nullable<T> value)
        where T : struct
    {
        if (value == null)
            return null;
    
        return value.ToString();
    }
    

    【讨论】:

    • 很抱歉添加了一个类似的答案,只是我想到了一个比你的更通用的版本......
    • 在更简洁的扩展方法 +1 中,将我的答案与您的答案保持一致是没有意义的。
    • @Clodoaldo 实际上他不是 :)
    • 好的,我会给你+1,这样我就不会因为被选中而感到难过......即使我被取消选中也没关系......
    猜你喜欢
    • 2016-05-25
    • 2014-05-25
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多