Fiquei me perguntando por que isso acontecia, já que ia contra o que eu esperava. Isso tem a ver com como os tipos Nullable Genéricos são interpretados em C#.
public static int? MyFunction(){
return default;
}
public static T MyFunctionGeneric<T>() {
return default;
}
public static T? MyFunctionGenericNullable<T>(){
return default;
}
public static void main(string[] args){
Console.WriteLine(MyFunction());
Console.WriteLine(MyFunctionGeneric<int?>());
Console.WriteLine(MyFunctionGenericNullable<int>());
}
Como esperado, quando defino o tipo de retorno, int?
o valor retornado padrão é null
.
Este também é o caso quando defino um genérico que retorna seu próprio tipo, porque int?
quando é passado, o valor retornado padrão é null
.
No entanto, no terceiro caso, embora o tipo de retorno seja tecnicamente int?
, o valor padrão retornado é 0
. Eu teria que passar in int?
como meu parâmetro de tipo para obter uma null
resposta. Note que isso acontece mesmo quando eu declaro explicitamentereturn default(T?)
Isso é um pouco inesperado. Alguém tem uma explicação para isso?