Rob*_*nik 1 c# lambda inline-if
我想在内联if语句中编写lambda表达式.但内联if语句必须具有强类型结果.
MyType obj = someObj.IsOk ? null : () => {
MyType o = new MyType(intVal);
o.PropertyName = false;
return o;
};
Run Code Online (Sandbox Code Playgroud)
当然这不起作用,因为lambda表达式不是强类型的.我想到了使用Func<intVal, MyType>委托,使其成为强大的类型.
但是我如何使用Func<>内联如果?我是否必须在外部定义自己的函数并在内联if语句中使用它?
它与lambda在这里输入无关.您正在尝试返回null或者(一个不带参数的函数并返回MyType),但是您告诉编译器该语句的结果不是函数,而只是一个MyType.我想你想做的是
MyType obj = someObj.IsOk ? null : new MyType(intVal);
Run Code Online (Sandbox Code Playgroud)
即使代码更复杂,您也可以使用对象初始化表达式:
MyType obj = someObj.IsOk ? null : new MyType(intVal) { ProName = false };
Run Code Online (Sandbox Code Playgroud)
如果你真的想使用lambda,你可以写:
MyType obj = someObj.IsOk ? null : ((Func<MyType>) (() => {
MyType o = new MyType(intVal);
o.ProName = false;
return o;
}))();
Run Code Online (Sandbox Code Playgroud)
然而,坦白说这是括号和演员阵容的噩梦.您可以使用辅助方法使其更简单:
public T Execute(Func<T> func)
{
return func();
}
...
MyType obj = someObj.IsOk ? null : Execute(() => {
MyType o = new MyType(intVal);
o.ProName = false;
return o;
});
Run Code Online (Sandbox Code Playgroud)