Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

389
Visualizações
¿Por qué C # no advierte sobre el campo largo no anulable?

¿Por qué no recibo una advertencia no anulable (o alguna otra advertencia) para que FieldTwo no esté configurado en el constructor? Estoy usando .Net 5.0 y la opción Nullable está configurada como verdadera en el archivo del proyecto.

 public class MyClass { public string FieldOne; public long FieldTwo; public MyClass (string p1, long p2) { FieldOne = p1; // FieldTwo is not set. Where is the non-nullable warning!? } }
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

long es un tipo de valor y no puede ser nulo. Entonces no hay razón para advertir sobre nulo. Lo que sospecho que desea es una advertencia de campo no inicializado.

Si nunca se asigna un campo privado, genera una advertencia CS0649. Sin embargo, si el campo es público o se modifica en cualquier parte de la clase, esta advertencia no se genera. Por ejemplo, el siguiente sería un código perfectamente aceptable y no debería dar una advertencia:

 public class MyClass{ private long myLong; public void Increment() => myLong++; }

Si el campo solo debe establecerse desde el constructor, debe declararlo como de solo lectura. Sin embargo, los campos públicos de solo lectura no activan una advertencia, incluso si probablemente deberían hacerlo. Consulte ¿Por qué NO recibo advertencias sobre campos de solo lectura no inicializados? .

over 4 years ago · Santiago Trujillo Relatório

0

long es un tipo de valor y no puede ser nulo. Los tipos de valor siempre se inicializan cuando se declaran con un valor predeterminado, en este caso 0 . ¿Tendrías que cambiar el tipo de campo a long? si quisieras almacenar un null

Esos campos no son propiedades de todos modos. Esto no es solo semántica. Los campos son detalles de implementación, incluso campos públicos. No se consideran parte de la superficie API de una clase. Las propiedades son parte de la API, todos los serializadores las serializan de forma predeterminada (los campos no) y garantizan que, de hecho, tener campos públicos es un olor a código.

Para asegurarse de que todas las propiedades se inicialicen, puede usar un tipo de record en lugar de una class :

 public record(string PropertyOne, long PropertyTwo);

Esto genera una clase con propiedades de solo inicio para PropertyOne y PropertyTwo y un constructor que requiere valores para todas las propiedades. Junto con operadores de igualdad, deconstructores y una implementación de ToString() que devuelve todas las propiedades en forma de cadena JSON.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda