我有多次调用第三方库中的方法.这些方法具有各种不同的签名/参数组合.
第三方库生成了我想要捕获和处理的特定错误,并且由于分辨率是相同的,我希望它在单个处理程序中发生.
所以我希望能够有一个方法,它基本上接受一个函数(委托)及其参数作为参数,并在一些try/catch逻辑中调用它.
我不知道它是不可能还是我没有正确的语法,但我无法弄清楚如何处理传入的每个方法的签名不同的事实.
有什么建议?
您可以使用Action和Func<T>包装方法和闭包来传递参数.
public TResult CallMethod<TResult>(Func<ThirdPartyClass, TResult> func)
{
try
{
return func(this.wrappedObject);
}
catch(ThirdPartyException e)
{
// Handle
}
}
public void CallMethod(Action<ThirdPartyClass> method)
{
this.CallMethod(() => { method(this.WrappedObject); return 0; });
}
Run Code Online (Sandbox Code Playgroud)
然后你可以通过以下方式使用:
var result = wrapper.CallMethod(thirdParty => thirdParty.Foo(bar, baz));
Run Code Online (Sandbox Code Playgroud)
编辑:以上假设您正在包装第三方库的实例.鉴于(来自您的评论)这些是静态方法,您可以使用:
public static TResult CallMethod<TResult>(Func<TResult> func)
{
try
{
return func();
}
catch(ThirdPartyException e)
{
// Handle
}
}
public static void CallMethod(Action method)
{
CallMethod(() => { method(); return 0; });
}
Run Code Online (Sandbox Code Playgroud)
然后致电:
var result = Wrapper.CallMethod(() => ThirdParty.Foo(bar, baz));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2031 次 |
| 最近记录: |