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 .csproj
archivo y comencé a codificar. Creé una lista simple que toma string[]
ay devuelve el string
en esa matriz que es igual abc
. Ahora, debido a que no estoy seguro de que abc
realmente exista en la matriz, uso FirstOrDefault()
, que debería ser predeterminado null
si 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