C# Lambda反射调用与泛型方法配合
时间: 2023-09-30 15:03:30 浏览: 214
C#中通过反射操作泛型
4星 · 用户满意度95%
Lambda 表达式和反射可以很好地配合使用,可以通过反射动态调用方法,并将其与泛型方法结合,实现更加灵活的编程。
以下是一个示例,演示如何使用 Lambda 表达式、反射和泛型方法结合调用方法:
```
using System;
using System.Linq.Expressions;
using System.Reflection;
class Program
{
static void Main(string[] args)
{
// 使用 Lambda 表达式创建一个 Func 委托
Func<int, int, int> addFunc = (x, y) => x + y;
// 获取 addFunc 的 MethodInfo 对象
MethodInfo addMethodInfo = addFunc.Method;
// 使用反射动态调用泛型方法
MethodInfo genericMethodInfo = typeof(Program).GetMethod("CallGenericMethod");
MethodInfo callMethodInfo = genericMethodInfo.MakeGenericMethod(addMethodInfo.ReturnType);
// 构建参数
object[] parameters = new object[] { addMethodInfo, 1, 2 };
// 调用泛型方法
int result = (int)callMethodInfo.Invoke(null, parameters);
Console.WriteLine("Result: " + result);
}
public static T CallGenericMethod<T>(MethodInfo method, object arg1, object arg2)
{
// 构建参数
object[] args = new object[] { arg1, arg2 };
// 调用方法
object result = method.Invoke(null, args);
// 返回结果
return (T)result;
}
}
```
在上面的示例中,我们首先创建了一个 Lambda 表达式,它是一个加法函数。然后,我们使用反射获取了该 Lambda 表达式对应的 MethodInfo 对象。接着,我们使用反射动态调用了泛型方法 CallGenericMethod,该方法接受一个 MethodInfo 对象和两个参数,并返回一个与 MethodInfo 对象返回类型相同的值。最后,我们通过反射调用了 CallGenericMethod 方法,并将参数传递给它。在 CallGenericMethod 方法内部,我们通过反射调用了传递的 MethodInfo 对象,实现了对 Lambda 表达式的调用,并返回了加法函数的结果。
阅读全文