Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 简写lambda表达式_C#_Linq_Lambda_Expression - Fatal编程技术网

C# 简写lambda表达式

C# 简写lambda表达式,c#,linq,lambda,expression,C#,Linq,Lambda,Expression,只是一个一般性的问题。。。我很喜欢用正手版本,但从学术角度来看,我很好奇 为什么要速记?:不编译。它不知道如何将lambda表达式转换为lambda表达式 Func<int> idProp = (personIdProperty == null) ? () => Person.UserAccountId : () => Person.Id; Func idProp=(person

只是一个一般性的问题。。。我很喜欢用正手版本,但从学术角度来看,我很好奇

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

            Func<int> idProp = (personIdProperty == null) ? 
                () => Person.UserAccountId : 
                () => Person.Id;
Func idProp=(personIdProperty==null)?
()=>Person.UserAccountId:
()=>Person.Id;
然而,当我把它转换成正手时,它工作得很好

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

提前感谢。

我以前从未尝试过,但是是的,lambda可以是许多不同的类型,如果您显式地强制转换结果,那么它就会工作

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

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

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

//...
private Func<T1> Func<T1>(Func<T1> f)
{
    return f;
}
var idProp=(personIdProperty==null)?
Func(()=>Person.UserAccountId):
Func(()=>Person.Id);
//...
私有函数Func(Func f)
{
返回f;
}

请格式化您的代码,使您的文章更具可读性。