Eu queria testar o novo recurso de tipos de referência anuláveis no C # 8.0.
Iniciei um novo projeto visando o .NET Core 3.0, habilitei os tipos de referência anuláveis no .csproj
arquivo e iniciei a codificação. Eu criei uma lista simples que recebe string[]
ae retorna a string
que é igual a abc
. Agora, como não tenho certeza de que abc
realmente exista na matriz, eu uso o FirstOrDefault()
qual deve ser o padrão null
se uma correspondência não for encontrada.
using System;
using System.Linq;
public string FindArgument(string[] args)
{
var arg = args.FirstOrDefault(x => x == "abc");
return arg;
}
Meu método retorna string
, que agora deve ser do tipo não anulável . Como FirstOrDefault()
pode retornar null
, eu esperaria que o método acima gerasse um aviso ao retornar a variável talvez nula arg
. Isso não.
Observando a assinatura do FirstOrDefault()
Visual Studio, fica claro o porquê : O método retorna a string
, e não o equivalente anulável que string?
eu esperaria.
Usar o corpo do método abaixo gera o aviso que eu esperava:
var arg = args.Contains("abc") ? "abc" : null;
return arg;
As bibliotecas do sistema (neste exemplo System.Linq
) realmente não expõem informações de nulidade ao direcionar o .NET Core 3.0?