c# mi.MakeGenericMethod(dep)
时间: 2024-09-10 19:17:58 浏览: 81
在C#中,`mi.MakeGenericMethod(dep)` 是使用反射创建泛型方法实例的一种方式。这里 `mi` 通常是一个 `MethodInfo` 对象,它代表了一个方法的信息,而 `dep` 是一个类型数组,表示泛型方法中使用的具体类型参数。
当你的程序需要动态地调用泛型方法时,`MethodInfo` 的 `MakeGenericMethod` 方法就变得非常有用。这个方法将创建一个新的 `MethodInfo` 实例,这个实例是原始 `MethodInfo` 对象的一个泛型版本,其中泛型参数已经被具体化为特定的类型。
以下是一个简单的例子来说明如何使用 `mi.MakeGenericMethod(dep)`:
```csharp
// 假设有一个泛型方法
public T SomeGenericMethod<T>(T arg) { ... }
// 在运行时,我们不知道要使用哪种类型,所以我们使用反射来调用它
Type genericType = typeof(SomeGenericMethod<>); // 获取泛型方法的类型信息
MethodInfo methodInfo = genericType.GetMethod("SomeGenericMethod"); // 获取MethodInfo对象
// 现在我们想调用SomeGenericMethod<int>,我们需要提供具体的类型
Type[] typeArgs = { typeof(int) }; // 这是具体化的类型参数
// 创建一个具体的泛型方法实例
MethodInfo specificMethodInfo = methodInfo.MakeGenericMethod(typeArgs);
// 现在我们可以使用这个具体的MethodInfo实例来创建委托或者直接调用方法
```
使用这个技术,可以在不知道具体类型参数的情况下,动态地调用泛型方法。这在编写通用的或高度动态的代码时非常有用。
阅读全文