6

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

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

有没有更短的?

4

5 回答 5

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();
}
于 2012-07-13T14:16:17.907 回答
5

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

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

用法:

var s = i.ToStringOrNull();

更新

从 C# 6 开始,您可以使用更方便的空条件运算符

var s = i?.ToString();
于 2012-07-13T14:18:37.570 回答
1

我认为

string s = i?.ToString();

更短。

于 2017-12-15T15:14:45.950 回答
0

我们也可以使用 System.Convert 即

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

正如已经提到的,我们也可以使用空条件运算符

string s = i?.ToString();
于 2021-10-25T12:03:35.690 回答
-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;
}
于 2017-12-15T15:07:57.530 回答