I am trying to use the conditional (ternary) operator to assign the proper lambda expression to a variable, depending on a condition, but I get the compiler error: Type of conditional expression cannot be determined because there is no implicit conversion between 'lambda expression' and 'lambda expression'. I can use the regular if-else to solve this problem, but the conditional operator makes more sense to me (in this context), would make the code more concise add, at least, I would like to know the reasons why it doesn't work.
// this code compiles, but is ugly! :) Action<int> hh; if (1 == 2) hh = (int n) => Console.WriteLine("nope {0}", n); else hh = (int n) => Console.WriteLine("nun {0}", n); // this does not compile Action<int> ff = (1 == 2) ? (int n) => Console.WriteLine("nope {0}", n) : (int n) => Console.WriteLine("nun {0}", n);
The C# compiler tries to create the lambdas independently and cannot unambiguously determine the type. Casting can inform the compiler which type to use:
Action<int> ff = (1 == 2) ? (Action<int>)((int n) => Console.WriteLine("nope {0}", n)) : (Action<int>)((int n) => Console.WriteLine("nun {0}", n));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With