C# 可以简化trycatch块吗?

C# 可以简化trycatch块吗?,c#,exception,C#,Exception,有时感觉try-catch块只是一个已经存在的作用域周围的额外作用域 原件: public void Method() { try { // do something ... } catch (CustomException e) { DoSomethingWithCustomException(e); } catch (Exception e) { DoSomethi

有时感觉try-catch块只是一个已经存在的作用域周围的额外作用域

原件:

public void Method()
{
    try
    {
        // do something
        ...
    }
    catch (CustomException e)
    {
        DoSomethingWithCustomException(e);
    }
    catch (Exception e)
    {
        DoSomethingWithException(e);
    }
}
简化:

public void Method()
{
    // do something
    ...
    catch (CustomException e) => DoSomethingWithCustomException(e); 
    catch (Exception e) => DoSomethingWithException(e); 
}
在我看来,如果您在整个范围内使用块的“try”部分,则它是没有意义的。除此之外,您还可以使用原始语法。此语法在foreach或任何其他循环中都很有用

那么有可能启用这样的语法吗

那么有可能启用这样的语法吗

不在当前版本的C#中。您始终可以建议一个语言功能,但首先搜索现有的建议,看看是否已经提出了

快速搜索问题中的“捕获”导致了这一几乎相同的提议:

请注意,它有1张赞成票和15张反对票。对此只有一条评论,但它至少对该功能的可行性给出了一些反馈

您还可以查看第三方库,它们可以在方法级别注入异常处理

那么有可能启用这样的语法吗

不在当前版本的C#中。您始终可以建议一个语言功能,但首先搜索现有的建议,看看是否已经提出了

快速搜索问题中的“捕获”导致了这一几乎相同的提议:

请注意,它有1张赞成票和15张反对票。对此只有一条评论,但它至少对该功能的可行性给出了一些反馈


你也可以看看这样的第三方库,它可以在方法级别注入异常处理。

有各种各样的建议来减少try/catch中的语法量,但是它们在语言开发人员中没有太大的吸引力。我不想问一个“否”的问题,因为目前不可能回答,我有点怀疑这种好处。我的意思是,我知道这会减少打字。。。但是一般来说,try/catch不应该占用整个方法体(当然有时候它们可以/应该,这没关系)。这也损害了可维护性,因为它隐藏了一个事实,即某些东西一直被捕获到最后(因此我不同意
。块的“try”部分毫无意义。
)。不需要用
try{…}
启动方法。可能有
/*一些代码*/尝试{…}捕获{…}
。现在,删除
try
部分,您无法区分
/*某些代码中的内容*/
try
中的内容。这可能是一个问题,因为您有一个
finally
零件。在这个例子中,如果
/*some code*/
返回了一些东西,那么就不应该执行
finally
,我不认为在整个方法的内部放置try/catch是很常见的。如果这种情况在你的代码库中到处发生,我会倾向于一些正在发生的代码气味。有各种各样的建议来减少try/catch中的语法量,但它们在语言开发人员中没有太大的吸引力。我不明白用“否”来问问题的意义,因为目前不可能回答,我有点怀疑这种好处。我的意思是,我知道这会减少打字。。。但是一般来说,try/catch不应该占用整个方法体(当然有时候它们可以/应该,这没关系)。这也损害了可维护性,因为它隐藏了一个事实,即某些东西一直被捕获到最后(因此我不同意
。块的“try”部分毫无意义。
)。不需要用
try{…}
启动方法。可能有
/*一些代码*/尝试{…}捕获{…}
。现在,删除
try
部分,您无法区分
/*某些代码中的内容*/
try
中的内容。这可能是一个问题,因为您有一个
finally
零件。在这个例子中,如果
/*some code*/
返回了一些东西,那么就不应该执行
finally
,我不认为在整个方法的内部放置try/catch是很常见的。如果这种情况在你的代码库中到处发生,我会倾向于一些正在发生的代码气味。请注意,像这样的建议已经有很多了——请在添加你自己的建议之前搜索现有的建议。(没有特定的顺序:,,,,和更多)请注意,已经有许多这样的提案——请在添加您自己的提案之前搜索现有提案。(没有特定顺序:、、、、和更多)