Pregunta

try
{
     list = from XElement e in d.Descendants(wix + "File")
            where e.Attribute("Name").Value.Contains(temp.Name) &&
            e.Parent.Parent.Attribute("Name").Value.Contains(temp.Directory.Name)
            select e;
}
catch (NullReferenceException e)
{
     MessageBox.Show(e.Message);
}
catch (Exception e)
{
     MessageBox.Show(e.Message);
}

Ahora mi pregunta es por qué este código produce un error de tiempo de ejecución que dice que tengo una excepción NullReferenceException no controlada.Si necesitas más información sobre el programa házmelo saber.

EDITAR:El depurador apunta a la parte "dónde" de la declaración linq.Cuando ejecuto este programa directamente desde el archivo exe, sigo recibiendo la excepción.

¿Fue útil?

Solución

EDITAR:Vale, creo que conozco el problema...se debe a la ejecución diferida de la consulta.

si tienes justo Obtuve la construcción de la consulta en el bloque try/catch, eso no detectará las excepciones que ocurran. mientras se ejecuta la consulta.

Mire el seguimiento de la pila que tiene y encontrará que habrá un marco de pila donde se encuentra. ejecutando la consulta: es solo la expresión lambda generada automáticamente que proviene de este fragmento de código y no se ejecuta dentro del alcance del bloque try/catch.

RESPUESTA ORIGINAL:

¿Estás viendo la excepción en el depurador?Si es así, vaya al cuadro de diálogo de excepción del depurador y cambie las preferencias para el punto en el que las excepciones hacen que el depurador se "rompe".El bloque de captura debe manejar el NullReferenceException normalmente.(Es cierto que no creo que debas captar NullReferenceException en primer lugar, y atrapar todo excepciones como esa generalmente también son una mala idea, excepto en la parte superior de la pila, pero ese es un asunto diferente).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top