一般来说只是一个问题...我使用简写版本很好,但从学术角度来看,我很好奇...
为什么简写?:不编译。它不知道如何将lambda表达式转换为lambda表达式。
Func<int> idProp = (personIdProperty == null) ?
() => Person.UserAccountId :
() => Person.Id;
但是,当我将其分解为手写时,它的效果很好。
Func<int> idProp;
if (personIdProperty == null)
idProp = () => Person.UserAccountId;
else
idProp = () => Person.Id;
提前致谢。
答案 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;
}