很抱歉,如果我的问题很愚蠢,但我有这样的代码:
public Object1 Method1(Object2 parameter)
{
try
{
return this.linkToMyServer.Method1(parameter);
}
catch (Exception e)
{
this.Logger(e);
}
return null;
}
public Object3 Method2(Object4 parameter)
{
try
{
return this.linkToMyServer.Method2(parameter);
}
catch (Exception e)
{
this.Logger(e);
}
return null;
}
/* ... */
public ObjectXX Method50(ObjectXY parameter)
{
try
{
return this.linkToMyServer.Method50(parameter);
}
catch (Exception e)
{
this.Logger(e);
}
return null;
}
我认为你看到的模式。有没有一种很好的方法只有一次尝试catch并在这个try catch中传递泛型方法?
本能地我会使用委托,但代表必须拥有相同的签名吗?
提前致谢。
问候。
答案 0 :(得分:9)
每当您看到这样的代码时,您都可以应用Template Method Pattern。
可能是这样的:
private TResult ExecuteWithExceptionHandling<TParam, TResult>(TParam parameter, Func<TParam, TResult> func)
{
try
{
return func(parameter);
}
catch (Exception e)
{
this.Logger(e);
}
return default(TResult);
}
public Object1 Method1(Object2 parameter)
{
return ExecuteWithExceptionHandling(parameter, linkToMyServer.Method1);
}
public Object3 Method2(Object4 parameter)
{
return ExecuteWithExceptionHandling(parameter, linkToMyServer.Method2);
}
等等......
答案 1 :(得分:1)
这可能对您有用。
public object BaseMethod(object[] userParameters,String FunctionName)
{
try
{
Type thisType = this.GetType();
MethodInfo theMethod = thisType.GetMethod(FunctionName);
object returnObj;
returnObj = theMethod.Invoke(this, userParameters);
return returnObj;
}
catch (Exception e)
{
this.Logger(e.InnerException);
}
}