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

334
Visualizações
Cómo evitar obtener una "posible asignación" nula "a una entidad no anulable"

Lo siento por este ejemplo incómodo, pero quiero mantenerlo lo más directo posible.

Digamos que analicé un archivo json, lo que me da la jerarquía a continuación

 var customers = myObj.SubObj?.CustomerList.EmptyIfNull(); var plusCustomers = customers.Where(...) // Resharper warning

myobj no puede ser nulo SubObject puede ser nulo a veces

Tengo un método de extensión

 IEnumerable<T> EmptyIfNull<T>(this IEnumerable<T> enumerable) => enumerable ?? Enumerable.Empty<T>();

Así que espero que la línea plusCustomers sea segura (lista vacía en lugar de nula). Pero recibo una advertencia

posible asignación "nula" a una entidad no anulable

Si reemplazo la primera línea con

 var customers = myObj.SubObj.CustomerList.EmptyIfNull();

Me deshago de la advertencia, pero eso no es correcto. ¿Cómo puedo convencer a Resharper de que esto está bien?... o me equivoco?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Puede agregar paréntesis:

 (myObj.SubObj?.CustomerList).EmptyIfNull();

El efecto del encadenamiento nulo ( ?. ) es evaluar toda la cadena de accesos de miembros a nulo, si el operando LHS es nulo, en lugar de evaluar solo ese acceso de miembro único a nulo. Por ejemplo, considere una larga cadena de accesos de miembros abcdef . Si solo a es anulable, solo necesitaría escribir ? después de a para que esto sea seguro. No solo evalúa a?.b como nulo si a es nulo, porque en ese caso tendría que escribir ? después de cada acceso de miembro para que esto sea seguro, y eso es un poco molesto.

Entonces, sin los corchetes, todo el acceso del miembro se anula debido a ?. , independientemente de cómo se llame al final.

Al agregar corchetes, rompe la cadena de accesos de los miembros, de modo que myObj.SubObj?.CustomerList sea de un tipo anulable, y llamar a EmptyIfNull en eso funciona como se esperaba, devolviendo cualquier tipo que EmptyIfNull deba devolver.

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