es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

.NET 6 ¿Cuál es la mejor manera de hacer que las propiedades sean requeridas y no nulas en registros?

Busqué una respuesta para esto y no pude encontrar una respuesta clara. Y sí, sé que existen preguntas similares en todas partes. Espero poder obtener una respuesta aquí.

Supongamos que tengo una clase Person con 2 propiedades (FirstName, MiddleName). FirstName es obligatorio y MiddleName es opcional.

Quiero que la propiedad FirstName siempre tenga datos no nulos.

Aquí hay algunas opciones que considero (pero ninguna de ellas parece ser perfecta).

Una forma opcional sería usar la sintaxis abreviada de los registros:

“`C#
// FirstName podría ser nulo (malo)
// MiddleName es opcional (bueno)
public record Person(string FirstName, string? MiddleName);

<pre><code><br />Otra forma podría ser usar el operador de "null-forgiving", pero aún así el mismo problema.

“`C#
// FirstName podría ser nulo (malo)
// MiddleName es opcional (bueno)
public record Person
{
public string FirstName { get; init; } = null!;
public string? MiddleName { get; init; }
}

La opción antigua sería verificar la entrada en el constructor:

“`C#
// FirstName es obligatorio y siempre tendrá algún dato (bueno)
// MiddleName es opcional (bueno)
// Sintaxis larga (mala)
public record Person
{
public string FirstName { get; init; }
public string? MiddleName { get; init; }

<pre><code>public Person(string firstName, string? middleName)
{
// Probablemente sería mejor verificar si es NullOrWhiteSpace.
ArgumentNullException.ThrowIfNull(firstName);

FirstName = firstName;
MiddleName = middleName;
}
</code></pre>

}
“`

Si la última opción es la forma de obligar a un valor no nulo, entonces me preguntaría:

  1. Con toda la nueva sintaxis abreviada, ¿es realmente la forma en que deberíamos hacerlo?
  2. ¿Cuándo debería usar la forma abreviada de escribir registros?
    (Siempre querría validar que los campos requeridos tengan valores y hacerlo en el constructor).
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en C# y .NET 6.0, el mejor enfoque para asegurarse de que la propiedad FirstName de una clase Person siempre tenga datos no nulos es verificar la entrada en el constructor. Aunque se pueden utilizar la sintaxis breve de registros o el operador de anulación, no ofrecen una solución perfecta.

    En el caso de usar la sintaxis breve de registros o el operador de anulación, sigue existiendo el problema de que la propiedad FirstName pueda ser nula. Sin embargo, el uso del constructor permite realizar una validación adecuada, asegurando que la propiedad FirstName siempre se establezca con un valor no nulo.

    En cuanto a cuándo utilizar la forma abreviada de escribir registros, se puede utilizar cuando no hay propiedades requeridas o cuando no es necesario realizar validación en el constructor. Sin embargo, para casos en los que se requiere validación, es preferible utilizar la sintaxis más larga e incluir el constructor para asegurar que todas las propiedades requeridas tengan valores.

Comments are closed.