gpt4 book ai didi

c# - 如何使用反射调用泛型方法?

转载 作者:太空宇宙 更新时间:2023-11-03 15:11:30 25 4
gpt4 key购买 nike

当类型参数在编译时未知,而是在运行时动态获取时,调用泛型方法的最佳方式是什么?

考虑以下示例代码 - 在 Example() 中方法,调用 GenericMethod<T>() 最简洁的方法是什么?使用 Type存储在 myType变量?

public class Sample
{
public void Example(string typeName)
{
Type myType = FindType(typeName);

// What goes here to call GenericMethod<T>()?
GenericMethod<myType>(); // This doesn't work

// What changes to call StaticMethod<T>()?
Sample.StaticMethod<myType>(); // This also doesn't work
}

public void GenericMethod<T>()
{
// ...
}

public static void StaticMethod<T>()
{
//...
}
}

最佳答案

您需要使用反射来获取开始的方法,然后通过使用 MakeGenericMethod 提供类型参数来“构造”它:

MethodInfo method = typeof(Sample).GetMethod(nameof(Sample.GenericMethod));
MethodInfo generic = method.MakeGenericMethod(myType);
generic.Invoke(this, null);

对于静态方法,将null 作为第一个参数传递给Invoke。这与泛型方法无关 - 这只是正常的反射。

如前所述,从 C# 4 开始,使用 dynamic 很多事情都变得更简单了——当然,如果您可以使用类型推断。它在类型推断不可用的情况下没有帮助,例如问题中的确切示例。

关于c# - 如何使用反射调用泛型方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41038459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com