【发布时间】:2012-07-13 09:42:21
【问题描述】:
我想将一个可以为空的数字转换成一个字符串维护空值。这就是我正在做的:
int? i = null;
string s = i == null ? null : i.ToString();
有更短的吗?
【问题讨论】:
-
不要认为实际上有什么更短的
-
除了扩展方法之外,不要看到它变得更短。
标签: c# type-conversion
我想将一个可以为空的数字转换成一个字符串维护空值。这就是我正在做的:
int? i = null;
string s = i == null ? null : i.ToString();
有更短的吗?
【问题讨论】:
标签: c# type-conversion
我们也可以使用 System.Convert 即
int? i = null;
string s = Convert.ToString(i); // it gives null if i is null.
如前所述,我们还可以使用空条件运算符
string s = i?.ToString();
【讨论】:
您可以为此创建一个扩展方法:
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 参数,因此删除了通用版本以专门用于十进制扩展,如下所示:
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;
}
【讨论】:
我认为
string s = i?.ToString();
更短。
【讨论】:
你可以写一些扩展方法:
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();
}
【讨论】: