如何将可空整数转换为字符串

13

我需要将可空整数转换为字符串

int? a = null;
string str = a.ToString();

我怎么能在没有异常的情况下执行这个操作? 我需要得到字符串""Null""。 请指导我。


2
使用Convert.ToString(a)代替a.ToString(),请参考https://dev59.com/RHE85IYBdhLWcg3wVR-g - David
3
如何将可空的整数转换为Google? - Uwe Keim
3
忽略那些讽刺的评论。显然,他们没有读过《迎接爱的夏天》(Kicking off the Summer of Love)这篇文章。 - David
我不知道它是何时发生的,但现在 ToString() 不再抛出异常了:https://learn.microsoft.com/en-us/dotnet/api/system.nullable-1.tostring?view=net-5.0 - Kai Hartmann
6个回答

37

您可以简单地使用Convert.ToString()方法,它可以处理空值并且不会抛出异常。

string str = Convert.ToString(a)

或者使用if条件语句

if(a.HasValue)
{
  string str = a.Value.ToString();
}

或者使用?三元运算符

string str = a.HasValue ? a.Value.ToString() : string.Empty;

1
Convert 如何处理 null 值?它会像 OP 问的那样返回 "null" 吗? - Yola
1
这个答案解释了如何处理null值的异常。一旦你处理好了,就可以放置你的逻辑来获取任何值(例如从上面提到的任何选项中获取“Null”)。 - Sachin
4
更明确地说,Convert.ToString(a) 返回的是 "" 而不是 null - Guerrilla

4
最简短的答案是:
int? a = null;
string aString = a?.ToString() ?? "null";

4
如果您需要在anull时真正需要字符串"Null":
string str = a.HasValue ? a.Value.ToString() : "Null";

1
这个答案至少回答了问题。 - Yola

2
我喜欢为此创建一个扩展方法,因为我总是反复进行这个操作。
public static string ToStringNullSafe<T>(this T value)
{
  if(value == null)
  {
    return null;
  }
  else
  {
     return value.ToString();
  }
}

如果您希望的话,显然可以使用格式化字符串创建一个重载。

2

我也会创建一个扩展方法,但是它的类型是Nullable而不是任何T。

public static string ToStringOrEmpty<T>(this T? t) where T : struct
{
    return t.HasValue ? t.Value.ToString() : string.Empty;
}

// usage
int? a = null;
long? b = 123;

Console.WriteLine(a.ToStringOrEmpty()); // prints nothing
Console.WriteLine(b.ToStringOrEmpty()); // prints "123"

鉴于下票的人显然不喜欢扩展方法的方式! - Liath

0
if(a.HasValue())
{
   return a.Value().ToString();
}
return string.Empty;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接