gpt4 book ai didi

c# - 有条件捕获异常

转载 作者:太空狗 更新时间:2023-10-29 18:00:59 24 4
gpt4 key购买 nike

注意:我很高兴地告诉您,异常过滤器现在采用 C# 6.0 语言。

这是一个思想实验,我对你的意见很感兴趣:你觉得它有意义吗?您知道是否已经为 C# 编程语言提出了类似的建议?我什至不知道将这样的提案发送到哪里...

这个想法是引入语法元素以仅在异常满足特定条件时捕获异常。

一个用例示例是在使用 COM Interop 时:一切总是抛出 COMException。实际的区分错误代码包含在其消息中。

那么(建议 1):

try
{
...
}
catch (COMException ex where ex.Message.Contains("0x800706BA"))
{
// RPC server unavailable
}
catch (COMException ex where ex.Message.Contains("0x80010001"))
{
// Call rejected by callee
}

转化为:

try
{
...
}
catch (COMException ex)
{
if (ex.Message.Contains("0x800706BA"))
{
// RPC server unavailable
}
else if (ex.Message.Contains("0x80010001"))
{
// Call rejected by callee
}
else
{
throw;
}
}

类似的情况有:SoapExceptionXmlException……


另一种情况是异常被包装为一般异常中的内部异常,捕获逻辑应该依赖于内部异常。

假设我们有一个像这样包装异常的 API:catch (NumberFormatException ex) { throw new BusinessException(ex) }

关于(提案 2A):

try
{
...
}
catch (inner NumberFormatException nfex)
{
...
}

转化为:

catch (Exception ex where ex.InnerException is NumberFormatException)
{
NumberFormatException nfex = ex.InnerException;
...
}

或 (2B):

catch (BusinessException bex inner NumberFormatException nfex)
{
...
}

转化为:

catch (BusinessException bex where bex.InnerException is NumberFormatException)
{
NumberFormatException nfex = bex.InnerException;
...
}

this case (originally from Java)它可能看起来像 (2C):

catch (RemoteAccessException raex inner inner MyException mex)
{
...
}

最佳答案

根据try-catch C# Reference for Visual Studio 2015 RC现在已实现:

Catch (ArgumentException e) when (e.ParamName == "…")
{
}

关于c# - 有条件捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3819842/

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