He visto preguntas similares a esto, pero involucran diferentes tipos, así que creo que esta es una pregunta nueva.¿Por qué no se compila "Func <bool> test = value? F: F"?
Considere el siguiente código:
public void Test(bool value)
{
// The following line provokes a compiler error:
// "Type of conditional expression cannot be determined because there is
// no implicit conversion between 'method group' and 'method group".
Func<bool> test = value ? F : F;
}
public bool F()
{
return false;
}
Ahora, de acuerdo con el C# 3.0 Standard,
El segundo y tercer operandos de la :? De mando del tipo de la expresión condicional . Sean X e Y los tipos del segundo y tercer operandos . Entonces,
Si X e Y son del mismo tipo, entonces este es el tipo del condicional lo contrario, si una conversión implícita (apartado 6.1) existe de X a Y, pero no de Y a X, entonces Y es el tipo de la expresión condicional . De lo contrario, si existe una conversión implícita (§6.1) de Y a X, pero no de X a Y, entonces X es el tipo de la expresión condicional . De lo contrario, no se puede determinar el tipo de expresión y se produce un error de tiempo de compilación .
Me parece que en mi código de ejemplo, X e Y deben ser del mismo tipo, ya que son la entidad mismo, Func. Entonces, ¿por qué no compila?
no lo sé, pero ¿puede explicar cómo puede escribir un nombre de método con un tipo de retorno nulo como este en una expresión 'Func' ?? –
Lo siento, en mi esfuerzo por simplificar el código de mi código original, eliminé erróneamente el tipo de devolución. ¡Lo arreglé ahora! –