欲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 };
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top