【问题标题】:C# Compiler Error using typeof(Expression<Func<,>>)使用 typeof(Expression<Func<,>>) 的 C# 编译器错误
【发布时间】:2015-11-13 13:57:05
【问题描述】:

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

typeof(Expression<Func<,>>)

据我了解,使用typeof 运算符可用于获取开放的泛型类型。但是,在这种情况下,编译器会抱怨它错过了来自 Func&lt;,&gt; 委托的类型信息:

Type expected

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

【问题讨论】:

  • 你需要先得到typeof(Expression&lt;&gt;)
  • 在你的情况下 open generic typeExpression&lt;&gt;Func&lt;,&gt; 但不是 Expression&lt;Func&lt;,&gt;&gt;
  • 你能解释一下你尝试做什么吗?可能是代码示例?
  • 呃,咖啡一定对我有影响。 Expression&lt;&gt; 就够了 :) 感谢您的提醒。

标签: c# compiler-errors typeof


【解决方案1】:

使用typeof,您可以获得关于开放泛型类型或封闭类型的类型信息。您不能同时使用typeof

Expression&lt;&gt; 是开放类型,但指定 Func&lt;,&gt; 类型参数会尝试引用封闭类型,这就是编译器希望您也指定 Func&lt;,&gt; 类型参数的原因。

只需使用typeof(Expression&lt;&gt;),这就是你需要的开放类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 2016-02-14
    • 2019-01-11
    • 1970-01-01
    相关资源
    最近更新 更多