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
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.
¿Alguien puede sugerir cómo se puede mitigar esto?
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.
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.
Puede anotar una propiedad directamente como no anulable.
public string Property{ get; set; } = null!;
Y dará una advertencia si el usuario intenta configurar el Property
comonull
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>();
}