将可空数字转换为字符串

时间:2012-07-13 14:11:16

标签: c# type-conversion

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

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

是否有更短的东西?

4 个答案:

答案 0 :(得分:8)

你可以写一些扩展方法:

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 :(得分:4)

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

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();

答案 2 :(得分:1)

我认为

string s = i?.ToString();

更短。

答案 3 :(得分:-1)

我需要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;
}