La propiedad que no acepta valores NULL debe contener un valor que no sea NULL al salir del constructor. Considere declarar la propiedad como anulable

Resuelto VivekDev asked hace 3 años • 15 respuestas

Tengo una clase sencilla como esta.

public class Greeting
{
    public string From { get; set; }
    public string To { get; set; } 
    public string Message { get; set; }
}

Curiosamente recibo la siguiente advertencia.

Severity    Code    Description Project File    Line    Suppression State
Warning CS8618  Non-nullable property 'From' must contain a non-null value when exiting constructor. 
Consider declaring the property as nullable.    MxWork.Elsa2Wf.Tuts.BasicActivities  
D:\work\MxWork\Elsa2.0WfLearning\MxWork.Elsa2.0Wf.Tuts\src 
\MxWork.Elsa2Wf.Tuts.BasicActivities\Messages\Greeting.cs   5   Active

Estoy desconcertado ante estos mensajes. Los obtuve de las tres propiedades y de repente apareció esto.

mensaje de advertencia de estudio visual

¿Alguien puede sugerir cómo se puede mitigar esto?

VivekDev avatar May 12 '21 21:05 VivekDev
Aceptado

Si no desea esto, puede desactivarlo eliminando la siguiente línea del archivo csproj o configurándola como disable. Por defecto el valor es disable.

<Nullable>enable</Nullable>

Aquí está la documentación oficial.

Vivek Nuna avatar Oct 23 '2021 04:10 Vivek Nuna

El compilador le advierte que la asignación predeterminada de su propiedad de cadena (que es nula) no coincide con el tipo indicado (que no es nulo string).

Esto se emite cuando se activan los tipos de referencia que aceptan valores NULL? , lo que cambia todos los tipos de referencia para que no sean nulos, a menos que se indique lo contrario con un archivo .

Por ejemplo, su código podría cambiarse a

public class Greeting
{
    public string? From { get; set; }
    public string? To { get; set; } 
    public string? Message { get; set; }
}

para declarar las propiedades como cadenas que aceptan valores NULL, o puede proporcionar los valores predeterminados de las propiedades en línea o en el constructor:

public class Greeting
{
    public string From { get; set; } = string.Empty;
    public string To { get; set; } = string.Empty;
    public string Message { get; set; } = string.Empty;
}

si desea conservar los tipos de propiedades como no nulos.

Slate avatar May 12 '2021 14:05 Slate

Puede anotar una propiedad directamente como no anulable.

public string Property{ get; set; } = null!;

Y dará una advertencia si el usuario intenta configurar el Propertycomonull

Simon Lehmann avatar Dec 09 '2021 12:12 Simon Lehmann

Para Entity Framework Trabajar con tipos de referencia que aceptan valores NULL:

public class NullableReferenceTypesContext : DbContext {
    public DbSet<Customer> Customers => Set<Customer>();
    public DbSet<Order> Orders => Set<Order>();
}
Zachary Scott avatar Jan 28 '2022 17:01 Zachary Scott