Quería probar el nuevo función de tipos de referencia anulables en C # 8.0.
Comencé un nuevo proyecto dirigido a .NET Core 3.0, habilité tipos de referencia anulables en el .csprojarchivo y comencé a codificar. Creé una lista simple que toma string[]ay devuelve el stringen esa matriz que es igual abc. Ahora, debido a que no estoy seguro de que abcrealmente exista en la matriz, uso FirstOrDefault(), que debería ser predeterminado nullsi no se encuentra una coincidencia.
using System;
using System.Linq;
public string FindArgument(string[] args)
{
var arg = args.FirstOrDefault(x => x == "abc");
return arg;
}
Mi método regresa string, que ahora debería ser del tipo no anulable . Dado que FirstOrDefault()puede regresar null, esperaría que el método anterior arroje una advertencia al devolver la variable quizás nula arg . No es asi.
Mirando la firma FirstOrDefault()en Visual Studio, queda claro por qué : el método devuelve un string, no el equivalente anulable string?que esperaría.
El uso del siguiente método del método produce la advertencia que esperaba:
var arg = args.Contains("abc") ? "abc" : null;
return arg;
¿Las bibliotecas del sistema (en este ejemplo System.Linq) realmente no exponen información de nulabilidad cuando se dirigen a .NET Core 3.0?
fuente
