c# - 我应该如何在编译时不知道类型的情况下调用泛型函数?

标签 c# generics

比方说,如果我遇到如下情况。


Type somethingType = b.GetType();
    // b is an instance of Bar();

Foo<somethingType>(); //Compilation error!!
    //I don't know what is the Type of "something" at compile time to call
    //like Foo<Bar>();


//Where:
public void Foo<T>()
{
    //impl
}

如何在编译时不知道类型的情况下调用泛型函数?

最佳答案

你需要使用反射:

MethodInfo methodDefinition = GetType().GetMethod("Foo", new Type[] { });
MethodInfo method = methodDefinition.MakeGenericMethod(somethingType);
method.Invoke();

编写泛型方法时,最好尽可能提供非泛型重载。例如,如果 Foo<T>() 的作者添加了一个Foo(Type type)重载,你不需要在这里使用反射。

关于c# - 我应该如何在编译时不知道类型的情况下调用泛型函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3555056/

相关文章:

c# - 泛型类的构造函数具有无效参数

java - Gradle - Java 项目 - 通用 For 循环

java - 在java中使用泛型类型

generics - 在 Scala 中创建参数图类型

java - 不兼容的通用通配符捕获

c# - 如何验证是否至少选择了 5 个组合框中的 2 个 c#

c# - 当我尝试对 PowerPoint 2013 使用 UI 自动化时,我只能在使用 RangeFromPoint 时获取第一个字符/单词

c# - MemberwiseClone 与新对象

c# - 具有相同项目源的 Datagrid 和 Listview

c# - 如何在 Unity TileSystem 中停止平铺动画?