在C++中,我试图在一个catch中捕获所有类型的异常(比如catch(Exception)在C#中).怎么做?更重要的是,如何才能捕获除零例外?
嗨,谢谢你的阅读.我是编程和C#和套接字编程的新手.在我的代码中,我尝试捕获问题,以便在我的应用程序中提供故障.下列:
catch (ArgumentNullException e)
{
OnNetworkEvents eventArgs = new OnNetworkEvents("Network Unavailable", e.Message);
OnUpdateNetworkStatusMessage(this, eventArgs);
}
catch (EncoderFallbackException e)
{
OnNetworkEvents eventArgs = new OnNetworkEvents("Network Unavailable", e.Message);
OnUpdateNetworkStatusMessage(this, eventArgs);
}
catch (SocketException e)
{
OnNetworkEvents eventArgs = new OnNetworkEvents("Network Unavailable", e.Message);
OnUpdateNetworkStatusMessage(this, eventArgs);
}
catch (ArgumentOutOfRangeException e)
{
OnNetworkEvents eventArgs = new OnNetworkEvents("Network Unavailable", e.Message);
OnUpdateNetworkStatusMessage(this, eventArgs);
}
catch (ObjectDisposedException e)
{
OnNetworkEvents eventArgs = new OnNetworkEvents("Network Unavailable", e.Message);
OnUpdateNetworkStatusMessage(this, eventArgs);
}
Run Code Online (Sandbox Code Playgroud)
我只是想知道我是否可以用一个单一替换这个重复的代码:
catch (Exception e) { handle here}
Run Code Online (Sandbox Code Playgroud)
这会有用吗?
再次感谢.
您想在哪里捕获异常以及为什么?
我很有兴趣看到人们发现将try/catch块放在哪里是有用的,希望可能出现一些通用模式.我将用C++发布我的两个示例答案,但任何语言都可以.
请回答一个位置和原因.谢谢.
architecture error-handling design-patterns exception error-reporting
我有一系列具有不同参数签名的函数:
public void function1 (string s1, string s1, string s3, string s4) {...}
public void function2 (int i1, int i2, string s3, string s4) {...}
public void function3 (int i1, string s2, int i3, string s4) {...}
.
.
etc //some 30 odd functions
Run Code Online (Sandbox Code Playgroud)
调用每个函数可能会抛出一组异常,如TimeoutException,CommunicationException等(是的,这些是WCF代理函数)
现在我必须将这些调用包装在try catch块中,但DRY原则说我写错了很多相同的try catch块:
public void Interfacefunction1 (...) {
try {
function1 (...);
}
catch (TimeoutException) {
taskResult.Success = false;
taskResult.Message = Resources.ServerConnectionBroke;
}
catch (CommunicationException) {
taskResult.Success = false;
taskResult.Message = Resources.CommunicationFailed;
}
}
//and... …Run Code Online (Sandbox Code Playgroud)