有一种简单的方法可以执行以下操作:
String s = myObj == null ? "" : myObj.ToString();
Run Code Online (Sandbox Code Playgroud)
我知道我可以做到以下几点,但我真的认为它是一个黑客:
String s = "" + myObj;
Run Code Online (Sandbox Code Playgroud)
如果Convert.ToString()有一个适当的重载将是很好的.
最近我问了一个关于如何清理我认为丑陋代码的问题.一个建议是创建一个扩展方法,它将执行所需的功能并返回我想要的功能.我的第一个想法是'太棒了!Extensions有多酷......"但经过一番思考后,我开始对使用Extensions有了第二个想法......
我主要担心的是,Extensions似乎是一种自定义的"快捷方式",可以让其他开发人员难以遵循.我理解使用扩展可以帮助使代码语法更容易阅读,但是如何跟随幕后的声音呢?
以我之前的问题代码片段为例:
if (entry.Properties["something"].Value != null)
attribs.something = entry.Properties["something"].Value.ToString();
Run Code Online (Sandbox Code Playgroud)
现在用扩展名替换它:
public static class ObjectExtensions
{
public static string NullSafeToString(this object obj)
{
return obj != null ? obj.ToString() : String.Empty;
}
}
Run Code Online (Sandbox Code Playgroud)
并使用语法调用:
attribs.something = entry.Properties["something"].Value.NullSafeToString();
Run Code Online (Sandbox Code Playgroud)
定义一个方便的方法,但它真的值得另一个类对象的开销吗?如果有人想重用我的代码片段而不理解扩展,会发生什么?我可以像使用相同的结果一样轻松地使用语法:
attribs.something = (entry.Properties["something"].Value ?? string.Empty).ToString()
Run Code Online (Sandbox Code Playgroud)
所以我做了一些挖掘,发现了一些关于使用Extensions的优点/缺点的文章.对于那些倾向于看看以下链接的人:
我无法确定哪种方式更好.自定义扩展执行我想要他们做的事情或更多显示的代码来完成相同的任务?我真的很想学习"真正的"开发人员对这个主题的看法......
我正在进行一个方法调用,它将另外四个方法调用的结果作为参数 - 但是进行这些调用的方法可能会也可能不会为空(对不起,如果这是一个绝对无法理解的句子).这是代码,如果它使事情更清楚:
public void Inform(Room north, Room south, Room east, Room west)
{
this.north = north;
this.south = south;
this.east = east;
this.west = west;
node.Inform(north.GetNode(), south.GetNode(),
east.GetNode(), west.GetNode());
}
Run Code Online (Sandbox Code Playgroud)
基本上,我想知道是否有一种快速简便的方法来检查一个对象是否为null并且除了条件之外简单地将'null'传递给方法 - 我宁愿不必为null的所有16种可能变体显式编码不是空的.
编辑:为了回应混淆,我想澄清一下:大多数时候我传入方法的对象不会为空.通常,Room对象存在于北,南,东和西,如果Room存在,GetNode()方法将返回适当的对象.我想确定一个给定的Room存在是否在尝试进行方法调用时避免空引用激活.
我有这样的代码.
string b=null;
string a = Convert.ToString(b);
Run Code Online (Sandbox Code Playgroud)
参考:
但是当我将b转换为字符串时,我只得到空值而不是空字符串.但是几天前我也使用相同的convert.tostring()进行了空转换.在那它工作正常,但现在不工作.我在这里转动我的头,请帮助我为什么会发生这种情况?唯一的事情是我在3.5框架中工作但现在4.0.
我有一个简单的类,ToString实现了我对内容感到满意.我试图通过查看各种选项是否有任何赞成/反对来决定什么是(最)正确的方法.
对于以下示例:
AstronautAstronaut:person我只是在这里选择雪球的选项:
string result = person == null ? "Unknown Astronaut" : person.ToString();string result = person.ToString() ?? "Unknown Astronaut";string result = (person ?? "Unknown Astronaut").ToString(); string result = person ?? (object)"Unknown Astronaut";我对这些的看法是
ToString感觉很难看,还担心ToString代码中的异常.string&Astronauttype不是同一类型,因此不能用于coalese.ToString应该person是null.综上所述: