How to write strongly typed lambda expressions?

c#, inline-if, lambda

Solution

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;
});

Problem

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?

Original source

Related problems