使用函数代理来封装API时,最常用的莫过于Func和Action。不过官方文档只提供了基于参数数目来的重载函数来实现的方法。下面的代码可以作为可变参数的一种实现,免去了写重载函数的麻烦。
internal static T HandleServiceCall(Expression> serviceMethod)
{
var serviceMethodInfo = (MethodCallExpression)serviceMethod.Body;
var argsArr = GetArgs(serviceMethodInfo);
try
{
var ret = serviceMethod.Compile()();
return ret;
}
catch (Exception ex)
{
//
}
}
internal static void HandleServiceCall(Expression serviceMethod)
{
var serviceMethodInfo = (MethodCallExpression)serviceMethod.Body;
var argsArr = GetArgs(serviceMethodInfo);
try
{
serviceMethod.Compile()();
}
catch (Exception ex)
{
//
}
}
private static object[] GetArgs(MethodCallExpression methodExp)
{
List args = new List();
foreach (var arg in methodExp.Arguments)
{
var obj = Expression.Convert(arg,