gpt4 book ai didi

c# - 执行 catch 语句中的所有内容而不会引发更多错误

转载 作者:行者123 更新时间:2023-11-30 13:30:44 25 4
gpt4 key购买 nike

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

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
}

我如何避免在 big catch 中出现所有那些 try catch?我也不想使用“if not null statements”。我想处理 catch block 中的所有委托(delegate),无论它们是否可能抛出空引用异常。所有行都需要在 catch block 内执行。

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

最佳答案

不,没有,如果我需要做某事并忽略结果,我通常会编写一个 try 函数。忽略异常不是最佳做法,但我理解有时这样做是可以接受的:

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

然后您可以按以下方式调用它:

Try(() => { var1.asdf.DoSomething(); });

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

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

然后您可以调用,这使得在您的代码中进行 null 检查并防止任何异常(顺便说一下,这非常慢)变得非常干净

var1.IfNotNull(v => v.asdf.DoSomething());

关于c# - 执行 catch 语句中的所有内容而不会引发更多错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28361906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com