如何使用动态类型参数创建 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));
我还冒昧地删除了数组初始值设定项,因为 MakeGenericType
是 params
。
我有
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));
我还冒昧地删除了数组初始值设定项,因为 MakeGenericType
是 params
。