我希望将可空数字转换为字符串,并保留 null 值。这是我的做法:
有更简短的方式吗?
我正在进行以下操作:
int? i = null;
string s = i == null ? null : i.ToString();
有更简短的方式吗?
我正在进行以下操作:
int? i = null;
string s = i == null ? null : 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();
}
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条件运算符:
var s = i?.ToString();
我认为
string s = i?.ToString();
更短。
int? i = null;
string s = Convert.ToString(i); // it gives null if i is null.
正如已经提到的,我们也可以使用空值条件运算符
string s = i?.ToString();
我需要针对 decimal 类型的 formatProvider 参数,因此将通用版本更改为专门针对 decimal 扩展的版本,如下所示:
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;
}