执行catch语句中的所有内容,而不会抛出更多错误

dev*_*hog 3 c#

我有一段代码,我尝试一次签署许多代表,但如果其中任何一个为null,我必须取消所有其他代理.

try
{
    this.var1.asdf += ...

    this.var2.asdf += ...

    this.var3.asdf += ...

    this.var4.asdf += ...

    //and so on
}
catch
{
    try {
    this.var1.asdf -= ...
    }catch{}

    try{
    this.var2.asdf -= ...
    }catch{}

    try{
    this.var3.asdf -= ...
    }catch{}

    //and so on
}
Run Code Online (Sandbox Code Playgroud)

我如何避免所有那些尝试捕获大捕获?我也不想使用"if not null statements".我想继续在catch块内的所有委托,无论它们是否可能抛出空引用异常.所有行都需要在catch块内执行.

有没有办法告诉catch不要抛出任何进一步的错误并运行它的所有代码?

Ian*_*Ian 10

不,没有,我通常会写一个try函数,如果我需要做一些事情并忽略结果.忽略异常并非最佳做法,但据我所知,有时这样做是可以接受的:

public T Try(Action<T> action)
{
   try 
   {
      return action();
   }
   catch(Exception ex)
   { 
       // Log the exception so you're at least aware of it
   }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以按以下行调用它:

Try(() => { var1.asdf.DoSomething(); });
Run Code Online (Sandbox Code Playgroud)

阅读了您的一条评论后,这可能是另一种不使用异常的方法:

public static void IfNotNull(this T value, Action<T> action)
{
   if(value != null)
      action(value);
}
Run Code Online (Sandbox Code Playgroud)

然后你可以调用,这使得在代码中执行空检查并防止任何异常(顺便说一下,这很慢)

var1.IfNotNull(v => v.asdf.DoSomething());
Run Code Online (Sandbox Code Playgroud)

  • 这是疯了OP不想把`if(var1!= null)var1.asdf - = ...;`因为会有20个if语句,但他们很乐意把`Try(()=> var1.asdf - = ...);`20次! (4认同)