速记lambda表达式

时间:2014-10-13 19:31:06

标签: c# linq lambda expression

一般来说只是一个问题...我使用简写版本很好,但从学术角度来看,我很好奇...

为什么简写?:不编译。它不知道如何将lambda表达式转换为lambda表达式。

            Func<int> idProp = (personIdProperty == null) ? 
                () => Person.UserAccountId : 
                () => Person.Id;

但是,当我将其分解为手写时,它的效果很好。

            Func<int> idProp;
            if (personIdProperty == null)
                idProp = () => Person.UserAccountId;
            else
                idProp = () => Person.Id;

提前致谢。

2 个答案:

答案 0 :(得分:1)

我之前从未尝试过,但是lambdas可能有很多种不同的类型,如果你明确地投射结果那么它就会起作用。

            Func<int> idProp = (personIdProperty == null) ? 
            (Func<int>) (() => Person.UserAccountId): 
            (() => Person.Id);

答案 1 :(得分:0)

在这种情况下,为了帮助推理,您可以通过函数传递Func。 这样你甚至可以省略Func的显式类型定义:

var idProp = (personIdProperty == null) ?
    Func(() => Person.UserAccountId) : 
    Func(() => Person.Id);

//...
private Func<T1> Func<T1>(Func<T1> f)
{
    return f;
}