Función anulable<T, TResult>

Función anulable<T, TResult>

Eso no tiene sentido.
Todos los tipos de referencia, incluido Func<...> , ya puede ser null .

Los tipos anulables se aplican a los tipos de valor (struct s), que normalmente no puede ser null .


Un Func es un delegado que es un tipo de referencia. Esto significa que ya es anulable (puede pasar nulo a un método).


Func -> Encapsula un método que devuelve un tipo especificado por parámetro genérico

Si el tipo de retorno es nulo, hay un delegado diferente (Acción)

Acción ->Encapsula un método que no devuelve un valor.

Si requiere que Func acepte parámetros que puedan aceptar nulos (tipo que acepta valores NULL), o requiere que Func devuelva un valor que puede ser nulo (tipo que acepta valores NULL), no hay restricción.

Por ejemplo.

    Func<int?, int?, bool> intcomparer = 
    (a,b)=>
    {
    if(a.HasValue &&b.HasValue &&a==b) 
        return true;
        return false;
    } ;

    Func<int?, int?, bool?> nullintcomparer = 
    (a,b)=>
    {

    if(a.HasValue &&b.HasValue &&a==b) 
        return true;
    if(!a.HasValue || !b.HasValue)
       return null;
        return false;
    } ;

    var result1 = intcomparer(null,null); //FALSE
    var result2 = intcomparer(1,null); // FALSE
    var result3 = intcomparer(2,2); //TRUE


    var result4 = nullintcomparer(null,null); // null
    var result5 = nullintcomparer(1,null); // null
    var result6 = nullintcomparer(2,2); //TRUE