В C# можно передать метод с нулевым значением Func?Nullable Func <T, TResult>
Ни Func<A, bool>?
, ни Func?<A, bool>
не работает.
В C# можно передать метод с нулевым значением Func?Nullable Func <T, TResult>
Ни Func<A, bool>?
, ни Func?<A, bool>
не работает.
Это не имеет смысла.
Все ссылочные типы, включая Func<...>
, уже могут быть null
.
Несъемные типы относятся к типам значений (struct
), которые обычно не могут быть null
.
Func является делегатом, который является ссылочным типом. Это означает, что он уже обнуляется (вы можете передать null методу).
Func -> Инкапсулирует метод, который возвращает тип, заданный родовым параметром
Если тип возвращаемого значения является недействительным, Существует другой делегат (Action)
Action -> Инкапсулирует метод, который не возвращается ценность.
Если вам требуется, чтобы Func принимал параметры, которые могут принимать значение null (тип NULL), или требуется, чтобы Func возвращал значение, которое может быть нулевым (тип NULL), ограничений нет.
Для примера.
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
Он не говорит о типе возвращения. – SLaks
@ bto.rdz: А? Javascript вообще не имеет принудительного применения. – SLaks