我有一系列具有不同参数签名的函数:
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...
public void Interfacefunction2 (...) {
try {
function2 (...);
}
catch (TimeoutException) {
taskResult.Success = false;
taskResult.Message = Resources.ServerConnectionBroke;
}
catch (CommunicationException) {
taskResult.Success = false;
taskResult.Message = Resources.CommunicationFailed;
}
}
//etc
Run Code Online (Sandbox Code Playgroud)
有没有办法编写一个函数来调用这些函数并在抛出时捕获异常?
编辑:
我无法控制将调用它们的接口函数序列.这些所有功能都暴露给用户(另一个程序员),用户可以按照自己喜欢的顺序调用任何一个,两个或多个.我只需要在EACH操作失败的情况下报告成功和错误消息.(请参阅更新的代码段).
你可以使用lambdas:
CatchCommonExceptions(() => function1(...));
private void CatchCommonExceptions(Action action)
{
try
{
action ();
}
catch (TimeoutException) {
taskResult.Success = false;
taskResult.Message = Resources.ServerConnectionBroke;
}
catch (CommunicationException)
{
taskResult.Success = false;
taskResult.Message = Resources.CommunicationFailed;
}
}
Run Code Online (Sandbox Code Playgroud)
对于那些返回值的人,你可以有一个Func <T>重载.
| 归档时间: |
|
| 查看次数: |
486 次 |
| 最近记录: |