Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Assign a lambda expression using the conditional (ternary) operator [duplicate]

Tags:

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); 
like image 317
Gerardo Lima Avatar asked Jul 03 '12 11:07

Gerardo Lima


1 Answers

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)); 
like image 152
Rich O'Kelly Avatar answered Sep 18 '22 02:09

Rich O'Kelly