我有一段代码,我尝试一次签署许多代表,但如果其中任何一个为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)
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |