如何编写强类型的lambda表达式?

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语句中使用它?

Mar*_*off 7

它与lambda在这里输入无关.您正在尝试返回null或者(一个不带参数的函数并返回MyType),但是您告诉编译器该语句的结果不是函数,而只是一个MyType.我想你想做的是

MyType obj = someObj.IsOk ? null : new MyType(intVal);
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 7

即使代码更复杂,您也可以使用对象初始化表达式:

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)