cod*_*nix 84 .net c# string null object
有一种简单的方法可以执行以下操作:
String s = myObj == null ? "" : myObj.ToString();
Run Code Online (Sandbox Code Playgroud)
我知道我可以做到以下几点,但我真的认为它是一个黑客:
String s = "" + myObj;
Run Code Online (Sandbox Code Playgroud)
如果Convert.ToString()有一个适当的重载将是很好的.
And*_*lon 155
C#6.0编辑:
使用C#6.0,我们现在可以拥有一个简洁,无版本的orignal方法:
string s = myObj?.ToString() ?? "";
Run Code Online (Sandbox Code Playgroud)
甚至:
string s = $"{myObj}";
Run Code Online (Sandbox Code Playgroud)
原答案:
String s = (myObj ?? String.Empty).ToString();
Run Code Online (Sandbox Code Playgroud)
要么
String s = (myObjc ?? "").ToString()
Run Code Online (Sandbox Code Playgroud)
更简洁.
不幸的是,正如已经指出的那样,你经常需要在任何一方使用强制转换来使用非String或Object类型:
String s = (myObjc ?? (Object)"").ToString()
String s = ((Object)myObjc ?? "").ToString()
Run Code Online (Sandbox Code Playgroud)
因此,尽管它看起来很优雅,但演员几乎总是必要的,并且在实践中并不简洁.
正如其他地方所建议的,我建议使用扩展方法来使这个更干净:
public static string ToStringNullSafe(this object value)
{
return (value ?? string.Empty).ToString();
}
Run Code Online (Sandbox Code Playgroud)
Hol*_*roe 40
string.Format("{0}", myObj);
Run Code Online (Sandbox Code Playgroud)
string.Format将null格式化为空字符串,并在非null对象上调用ToString().据我了解,这就是你要找的东西.
Rob*_*iam 14
如果Convert.ToString()有一个适当的重载将是很好的.
Convert.ToString(Object value)
从那以后就出现了.Net 2.0(在问Q之前大约5年),这看起来完全符合你的要求:
http://msdn.microsoft.com/en-us/library/astxcyeh(v=vs.80).aspx
我错过/误解了一些非常明显的东西吗?
Pie*_*kel 13
使用扩展方法,您可以完成此任务:
public static class Extension
{
public static string ToStringOrEmpty(this Object value)
{
return value == null ? "" : value.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
以下内容不会向屏幕写入任何内容,也不会抛出异常:
string value = null;
Console.WriteLine(value.ToStringOrEmpty());
Run Code Online (Sandbox Code Playgroud)
我不同意这个:
String s = myObj == null ? "" : myObj.ToString();
Run Code Online (Sandbox Code Playgroud)
无论如何都是黑客攻击.我认为这是清晰代码的一个很好的例子.你想要达到的目标是绝对明显的,并且你期望无效.
更新:
我现在看到你并不是说这是一个黑客.但是,你认为这种方式不是要走的问题.在我看来,它绝对是最清晰的解决方案.