我最近发现:抛出一个异常,如果一个对象为空
if (Foo() != null)
{ mymethod(); }
可以改写为
Foo?.mymethod()
可在下列以类似的方式被改写?
if (Foo == null)
{ throw new Exception()}
我最近发现:抛出一个异常,如果一个对象为空
if (Foo() != null)
{ mymethod(); }
可以改写为
Foo?.mymethod()
可在下列以类似的方式被改写?
if (Foo == null)
{ throw new Exception()}
我不知道你为什么会...
public Exception GetException(object instance)
{
return (instance == null) ? new ArgumentNullException() : new ArgumentException();
}
public void Main()
{
object something = null;
throw GetException(something);
}
有在C#中没有类似的方式语法6
但是,如果你愿意,你可以使用简化空检查扩展方法...
public static void ThrowIfNull(this object obj)
{
if (obj == null)
throw new Exception();
}
使用
foo.ThrowIfNull();
或改进它显示空对象名称。
public static void ThrowIfNull(this object obj, string objName)
{
if (obj == null)
throw new Exception(string.Format("{0} is null.", objName));
}
foo.ThrowIfNull("foo");
使用空条件
方法调用可以改为: foo.ThrowIfNull(nameof(foo)); 如果变量名称被更改,使其安全:) –
If null then null; if not then dot
代码可以通过阅读时说,声明自己是很容易理解。例如在你的例子中,如果foo为null,那么它将返回null。如果它不为空,那么它会“点”,然后抛出一个我不相信的异常就是你想要的。
如果你正在寻找一种速记方式来处理空检查,我会推荐Jon Skeet's answer here和他的相关blog post关于这个话题。
Deborah Kurata在我推荐的this Pluralsight course中引用了这种说法。
你拥有它的方式是正确的。 [空条件运算符](https://msdn.microsoft.com/en-us/library/dn986595.aspx)只返回NULL。 – Steve
有没有捷径可以抛出异常,但你可以做的事情之一是缩短检查,如“if(Foo == null || Foo.Bar == null || Foo.Bar.Oof == null)throw ...如果(Foo?.Bar?.Oof == null)抛出...' – Mark