C#编译器使用typeof(表达式<;函数<;,>;>;)时出错

本文关键字:gt lt 出错 函数 编译器 表达式 typeof | 更新日期: 2023-09-27 18:21:52

Title基本上说明了一切。我正在实现一些逻辑,分析表达式并在这里和那里使用反射。为了检索以Expression<Func<T, S>>为参数的特定泛型方法的重载,我使用typeof运算符来获得该参数的正确开放泛型类型:

typeof(Expression<Func<,>>)

据我所知,使用typeof运算符可以获得开放的泛型类型。然而,在这种情况下,编译器会抱怨它错过了Func<,>委托的类型信息:

Type expected

这是按规格吗?如果是,如何在这里获得正确的类型?我正在使用Visual Studio 2013更新4/C#5

C#编译器使用typeof(表达式<;函数<;,>;>;)时出错

使用typeof,您可以获得关于开放泛型类型或闭合类型的类型信息。不能将typeof与两者混合使用。

Expression<>是一个开放类型,但指定Func<,>的类型参数会试图引用一个封闭类型,这就是为什么编译器希望您也指定Func<,>的类型参数。

只需使用typeof(Expression<>),这就是您需要的开放型。