C# 可以简化trycatch块吗?
有时感觉try-catch块只是一个已经存在的作用域周围的额外作用域 原件:C# 可以简化trycatch块吗?,c#,exception,C#,Exception,有时感觉try-catch块只是一个已经存在的作用域周围的额外作用域 原件: public void Method() { try { // do something ... } catch (CustomException e) { DoSomethingWithCustomException(e); } catch (Exception e) { DoSomethi
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是很常见的。如果这种情况在你的代码库中到处发生,我会倾向于一些正在发生的代码气味。请注意,像这样的建议已经有很多了——请在添加你自己的建议之前搜索现有的建议。(没有特定的顺序:,,,,和更多)请注意,已经有许多这样的提案——请在添加您自己的提案之前搜索现有提案。(没有特定顺序:、、、、和更多)