gpt4 book ai didi

c# - 如何编写一个函数来调用另一个函数并捕获一些异常?

转载 作者:行者123 更新时间:2023-11-30 19:08:12 24 4
gpt4 key购买 nike

我有一系列具有不同参数签名的函数:

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

调用每个函数可能会抛出一组异常,如 TimeoutException、CommunicationException 等(是的,这些是 WCF 代理函数)

现在我必须将这些调用包装在 try catch block 中,但是 DRY 原则说我写了这么多看起来相同的 try catch block 是错误的:

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

有没有办法编写一个函数来调用这些函数并在抛出时捕获异常?

编辑:

我无法控制调用它们的接口(interface)函数的顺序。这些所有功能都暴露给用户(另一个程序员),用户将以她喜欢的任何顺序调用任何一个、两个或多个。我只需要在每次操作失败时报告成功和错误消息。 (请参阅更新的代码片段)。

最佳答案

你可以使用 lambda:

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;
}
}

并且您可以为那些返回值的函数重载 Func

编辑:您可以查看 complete source here .

关于c# - 如何编写一个函数来调用另一个函数并捕获一些异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1297964/

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