This question already has an answer here:
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);
In fact, with type inference, you can:
The result is much more concise. (I let you decide if it's more readable.)
The C# compiler tries to create the lambdas independently and cannot unambiguously determine the type. Casting can inform the compiler which type to use:
Basically the same answer as others, in a different form
This will work.
There are two problems here
1. Problem with Expression
The compiler is telling you exactly what's wrong -
'Type of conditional expression cannot be determined because there is no implicit conversion between 'lambda expression' and 'lambda expression'
.It means what you have written is lambda expression and the resultant variable is also lambda expression.
The lambda expression doesn't have any particular type - it's just convertible to the expression tree.
A member-access expression (which is what you're trying to do) is only available in the forms
... and a lambda expression isn't a primary expression.
2. Problem with Ternary Operator
If we do
This results in error saying exactly like yours.
'Type of conditional expression cannot be determined because there is no implicit conversion between 'bool' and '<null>'
But error is gone if we do this
Casting of one side will also work
OR
For your case
OR