题
欲if语句内联内写lambda表达式。但是,内联if语句必须有强大的类型的结果。
MyType obj = someObj.IsOk ? null : () => {
MyType o = new MyType(intVal);
o.PropertyName = false;
return o;
};
当然这不工作,因为lambda表达式不是强类型。我想用Func<intVal, MyType>
委托,以使其强型的。
但我怎么用这个Func<>
里面内嵌如果?是的,我将不得不之外定义自己的功能和内嵌if语句?
解决方案
即使在更复杂的代码,则可以使用一个对象初始化表达式:
MyType obj = someObj.IsOk ? null : new MyType(intVal) { ProName = false };
如果您的真正的希望,虽然使用lambda,你可以写:
MyType obj = someObj.IsOk ? null : ((Func<MyType>) (() => {
MyType o = new MyType(intVal);
o.ProName = false;
return o;
}))();
然而,这是一个坦率恶梦支架和铸件。你可以把它与一个辅助方法简单:
public T Execute(Func<T> func)
{
return func();
}
...
MyType obj = someObj.IsOk ? null : Execute(() => {
MyType o = new MyType(intVal);
o.ProName = false;
return o;
});
其他提示
它没有任何这里做的拉姆达的打字。您正在试图返回要么null
或(函数没有参数和返回的MyType),但你告诉编译器该语句的结果不是一个功能,而只是一个MyType的。我想你想要做的是
MyType obj = someObj.IsOk ? null : new MyType(intVal);
如果你有这样的事情......
var obj = (someObj.IsOK) ? null : () => {
return new MyType(intVal) { PropName =false }; }
您将得到错误...
“没有显式转换 空和λ表达之间。“
其原因是,在此 SO线程。
标记是你想用什么样的代码示例做,除了可以像设置属性以及正确的是这样的...
var obj = someObj.IsOk ? null : new MyType(intVal) { PropName = false };
不隶属于 StackOverflow