I want to write a lambda expression within an inline if statement. But inline if statement must have strong type results.
MyType obj = someObj.IsOk ? null : () => {
MyType o = new MyType(intVal);
o.PropertyName = false;
return o;
};
Of course this doesn't work, because lambda expression isn't strongly typed. I thought of using Func<intVal, MyType>
delegate, to make it strong type.
But how do I use this Func<>
inside inline if? Is it at all possible of would I have to define my own function outside and use it in inline if statement?
Even with the more complicated code, you can use an object initializer expression:
MyType obj = someObj.IsOk ? null : new MyType(intVal) { ProName = false };
If you really want to use a lambda though, you could write:
MyType obj = someObj.IsOk ? null : ((Func<MyType>) (() => {
MyType o = new MyType(intVal);
o.ProName = false;
return o;
}))();
However, this is frankly a nightmare of brackets and casts. You can make it simpler with a helper method:
public T Execute(Func<T> func)
{
return func();
}
...
MyType obj = someObj.IsOk ? null : Execute(() => {
MyType o = new MyType(intVal);
o.ProName = false;
return o;
});