【问题标题】:.net lambda expression casting.net lambda 表达式转换
【发布时间】:2011-01-05 09:45:48
【问题描述】:

也许我想要实现的目标是无意义的,但我认为它应该有效。 我有一个表情

Expression<Func<Model.Document, bool>> expr1 = d => //something

我需要将此表达式转换为

Expression<Func<Model.Invoice, bool>

Model.Invoice 继承自 Model.Document

这可能吗?

【问题讨论】:

    标签: .net lambda expression


    【解决方案1】:

    这实际上与 lambda 表达式无关 - 它与表达式树有关,尤其是 Expression&lt;TDelegate&gt;Expression&lt;TDelegate&gt; 在 T 中是不变的 - 即使不是,Func&lt;Model.Document, bool&gt;Func&lt;Model.Invoice, bool&gt; 之间的关系也不适合协方差,除非我弄错了(这很有可能)。

    我怀疑您需要拆分 Expression&lt;T&gt; 并重新创建它,这可能不是非常简单...或者您可以在现有的 Expression&lt;T&gt; 周围添加一个包装层,这相当于说:

     Expression<Func<Invoice, bool>> = invoice => (d => ...)(invoice);
    

    【讨论】:

    • 我喜欢包装的想法,但我不明白它应该如何工作。我有 Expression> expr1 = d => true;我需要获取 Expression> expr2;如何包装 expr1?
    • @themarcuz:您需要研究表达式 API - 基本上弄清楚如何从另一个表达式调用一个表达式。我想不出头顶上的细节,但我希望它是可能的......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    相关资源
    最近更新 更多