如何使用动态类型参数创建 System.Func 类型

How do I make a type of a System.Func with dynamic type arguments

我有

    Type tsomething = /* ... */ ;
    Type comparer = typeof(Func).MakeGenericType(new Type[]{tsomething, tsomething, int});

但是编译器不喜欢未专门化的Func。有没有办法把它拼出来,这样我就可以动态地将通用类型转换为专用类型。

我无法用直接特化的 Func 替换,因为我在编译时不知道自己的类型。 Reflection.Emit涉及;试图写 typeof(Func<something, something>, int) 是不可能的。

完全相同的构造出现在

的几行下方
    il.DeclareLocal(typeof(IEnumerator).MakeGenericType(new Type[]{tsomething}));

当你这样做的时候,你必须知道参数的数量(类型参数的数量)。该功能在语言规范中称为“开放”或“未绑定”泛型。这是代码。

Type tsomething = typeof(string) ;
Type comparer = typeof(Func<,,>).MakeGenericType(tsomething, tsomething, typeof(int));

我还冒昧地删除了数组初始值设定项,因为 MakeGenericTypeparams