Search code examples
c#lambdainline-if

How to write strongly typed lambda expressions?


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?


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