gpt4 book ai didi

c# - 许多方法的捕获代码相同

转载 作者:行者123 更新时间:2023-11-30 19:10:47 25 4
gpt4 key购买 nike

我有几个 C# 方法要包装在 try-catch block 中。每个函数都将具有相同的捕获逻辑。有没有一种优雅的方法可以为这些函数中的每一个添加一个装饰器,以便它们都被同一个 try/catch block 包裹?我不想将 try/catch block 添加到所有这些函数。

例子:

public void Function1(){
try {
do something
}catch(Exception e) {
//a BUNCH of logic that is the same for all functions
}
}

public void Function2() {
try {
do something different
}catch(Exception e) {
//a BUNCH of logic that is the same for all functions
}
}

最佳答案

对此有一些功能性的解决方案吗?请注意,我没有吞下异常并使用 throw; 语句,这将重新抛出异常并保持其原始堆栈跟踪。不要默默地吞下异常——这被认为是一种非常糟糕的做法,调试代码会变得很糟糕。

void Main()
{
WrapFunctionCall( () => DoSomething(5));
WrapFunctionCall( () => DoSomethingDifferent("tyto", 4));
}

public void DoSomething(int v){ /* logic */}

public void DoSomethingDifferent(string v, int val){ /* another logic */}

public void WrapFunctionCall(Action function)
{
try
{
function();
}
catch(Exception e)
{
//a BUNCH of logic that is the same for all functions
throw;
}
}

如果你需要返回一些值,WrapFunctionCall 方法的签名会改变

void Main()
{
var result = WrapFunctionCallWithReturn( () => DoSomething(5));
var differentResult = WrapFunctionCallWithReturn( () => DoSomethingDifferent("tyto", 4));
}

public int DoSomething(int v){ return 0; }

public string DoSomethingDifferent(string v, int val){ return "tyto"; }

public T WrapFunctionCallWithReturn<T>(Func<T> function)
{
try
{
return function();
}
catch(Exception e)
{
//a BUNCH of logic that is the same for all functions
throw;
}
}

关于c# - 许多方法的捕获代码相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15684663/

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