gpt4 book ai didi

c# - 有没有办法只返回不使用 LINQ 抛出异常的函数调用?

转载 作者:太空狗 更新时间:2023-10-30 00:28:09 28 4
gpt4 key购买 nike

我被扔进了一个现有的代码库,部分工作是在我进行更新时让代码逐渐接受测试。所以这是一个将旧的和丑陋的东西变得更好的过程。

在这种情况下,有一段类似这样的代码:

foreach (var thingamajigLocator in thingamajigLocators)
{
Thingamajig thingamajig;
try
{
thingamajig = thingamajigservice.GetThingamajig(thingamajigLocator);
}
catch
{
// exception logged further down, but is rethrown
continue;
}

thingamajigCollection.Add(thingamajig);
}

这很丑陋,理论上,如果异常被进一步向下处理,就没有必要在这里处理它,但代码就是这样,目前,处理服务代码的工作量太大了。

我很想做这样的事情:

thingamajigCollection = thingamajigLocators
.Select(tl => thingamajigservice.GetThingamajig(tl))
.Where( /* some condition that strips out the ones throwing exceptions */ );

这有可能吗?还有其他建议吗?我当然可以将 foreach 与 try/catch 一起保留,但它似乎可以更优雅,因为我不关心在这种情况下实际的异常是什么。同样,我知道这是一种可怕的形式,需要加以解决,但现在没有时间。

最佳答案

其实并没有什么区别。 Func 只是一个代表。所以,你可以让它变得非常简单:

thingamajigCollection = thingamajigLocators
.Select(tl =>
{
try
{
return thingamajigservice.GetThingamajig(tl);
}
catch(Exception)
{
return null;
}
})
.Where(t1 => t1!=null);

作为一个选项,您可以将 GetThingamajig 包装在新方法中以在那里捕获异常。

注意:正如 hmemcpy 所说,吞噬异常并不是最好的方法。所以,你最好尝试重新设计。

关于c# - 有没有办法只返回不使用 LINQ 抛出异常的函数调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3914131/

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