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 .csprojarquivo e iniciei a codificação. Eu criei uma lista simples que recebe string[]ae retorna a stringque é igual a abc. Agora, como não tenho certeza de que abcrealmente exista na matriz, eu uso o FirstOrDefault()qual deve ser o padrão nullse 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?