2016-02-17 49 views
0

我最近发现:抛出一个异常,如果一个对象为空

if (Foo() != null)  
    { mymethod(); } 

可以改写为

Foo?.mymethod() 

可在下列以类似的方式被改写?

if (Foo == null) 
{ throw new Exception()} 
+0

你拥有它的方式是正确的。 [空条件运算符](https://msdn.microsoft.com/en-us/library/dn986595.aspx)只返回NULL。 – Steve

+1

有没有捷径可以抛出异常,但你可以做的事情之一是缩短检查,如“if(Foo == null || Foo.Bar == null || Foo.Bar.Oof == null)throw ...如果(Foo?.Bar?.Oof == null)抛出...' – Mark

回答

1

我不知道你为什么会...

public Exception GetException(object instance) 
{ 
    return (instance == null) ? new ArgumentNullException() : new ArgumentException(); 
} 

public void Main() 
{ 
    object something = null; 
    throw GetException(something); 
} 
2

有在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"); 
使用空条件
+0

方法调用可以改为: foo.ThrowIfNull(nameof(foo)); 如果变量名称被更改,使其安全:) –

2

If null then null; if not then dot

代码可以通过阅读时说,声明自己是很容易理解。例如在你的例子中,如果foo为null,那么它将返回null。如果它不为空,那么它会“点”,然后抛出一个我不相信的异常就是你想要的。

如果你正在寻找一种速记方式来处理空检查,我会推荐Jon Skeet's answer here和他的相关blog post关于这个话题。

Deborah Kurata在我推荐的this Pluralsight course中引用了这种说法。

相关问题