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

924
Visualizações
La forma más elegante de dejar de recibir CS8602 en VS2022, .NET 6, C# 10

Tengo el siguiente código de muestra en VS 2022, C# .NET 6.0:

 using System.Xml; XmlDocument doc = new XmlDocument(); doc.LoadXml("<root/>"); foreach (XmlNode node in doc.SelectNodes("aaa")) Console.WriteLine(node.OuterXml);

y obtengo "CS8602: Desreferencia de una referencia posiblemente nula" en la línea doc.SelectNodes. El código funciona en el sentido de que no falla sino que simplemente no hace nada cuando no encuentra un nodo llamado 'aaa'. Si pongo 'root', lo encuentra. Entonces, por lo que veo, no estoy haciendo nada malo y ofendiendo al compilador.

Sin embargo, la advertencia está ahí y parece incorrecta y, por lo tanto, molesta. Mis dos preguntas son:

  1. ¿Es un error en la lógica de advertencia del compilador?
  2. ¿Existe una forma mejor (es decir, breve, no superflua) de escribir un código similar que busque todos los nodos que coincidan con una determinada consulta XML y procesarlos sin generar la advertencia?

Descubrí que solo puedo agregar "#pragmaadvertencia deshabilitar CS8602", pero eso no parece una gran solución. Lo ideal sería aprovechar esta advertencia en otros casos que me parecen legítimos a diferencia de este.

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

0

¿Cuál es la forma más elegante de dejar de recibir el error?
En su archivo de proyecto, elimine <Nullable>enable</Nullable>

¿Es un error en la lógica de advertencia del compilador?
No

¿Hay una forma mejor (es decir, breve, no superflua) de escribir un código similar?
"Mejor" es subjetivo. Creo que su código está bien, pero esto es lo que la advertencia quiere que haga:

 XmlDocument doc = new XmlDocument(); doc.LoadXml("<root/>"); var nodes = doc.SelectNodes("aaa"); if (nodes == null) { //handle this case here return; } foreach (XmlNode node in nodes) Console.WriteLine(node.OuterXml);

O podrías hacer algo como esto:

 XmlDocument doc = new XmlDocument(); doc.LoadXml("<root/>"); foreach (var node in Enumerate(doc.SelectNodes("aaa"))) Console.WriteLine(node.OuterXml);

 private static IEnumerable<XmlNode> Enumerate(XmlNodeList? list) { if (list == null) yield break; foreach (XmlNode item in list) { yield return item; } }
over 4 years ago · Santiago Trujillo Relatório

0

Ahora entiendo que, como comentó GSerg , el método API que se declara como XmlNodeList? (cadena) es la fuente de la advertencia (sin embargo, nunca devuelve un valor nulo; devuelve una referencia no nula a una lista vacía).

Mi solución subjetiva "más elegante" que encontré hasta ahora es hacer esto:

 #pragma warning disable CS8602 foreach (XmlElement item in doc.SelectNodes("...")) #pragma warning restore CS8602

porque eso suprime justamente esta instancia, y puedo beneficiarme de otras instancias de esta advertencia que, me atrevo a decir, son más legítimas.

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