如果对象为null则抛出异常

时间:2016-02-17 23:44:36

标签: c# .net visual-studio null operators

我最近发现:

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

可以改写为

Foo?.mymethod()

可以用类似的方式重写以下内容吗?

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

4 个答案:

答案 0 :(得分:4)

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");

答案 1 :(得分:4)

是的,从C#7开始,您可以使用投掷表达式

var firstName = name ?? throw new ArgumentException (nameof(name), "Mandatory parameter");

Source

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:2)

If null then null; if not then dot

使用null条件的代码可以通过在阅读时向自己说出该语句来轻松理解。因此,例如在您的示例中,如果foo为null,则它将返回null。如果它不是null,那么它会" dot"然后抛出一个我不相信你想要的例外。

如果您正在寻找处理空检查的简写方法,我建议Jon Skeet's answer here及其相关的blog post主题。

Deborah Kuratathis Pluralsight course中引用了这句话,我也建议这样做。