Trouver à l'intérieur de la plupart exception sans l'aide d'une boucle while?

Quand C# déclenche une exception, il peut avoir un intérieur d'exception. Ce que je veux faire est d'obtenir à l'intérieur de la plupart d'exception, ou en d'autres termes, la feuille d'exception qui n'a pas un intérieur d'exception. Je peux le faire dans une boucle while:

while (e.InnerException != null)
{
    e = e.InnerException;
}

Mais je me demandais si il y avait quelques one-liner que je pourrais utiliser pour ce faire à la place.

  • Je me suis levée d'une exception dans une de mes classes, mais ma classe est utilisé par une bibliothèque qui avale toutes les exceptions et jette sa propre. Le problème est, à l'exception de la bibliothèque est très générique et j'ai besoin de savoir qui d'exception, je l'ai jeté à savoir comment gérer le problème. Pour aggraver les choses, la bibliothèque va jeter son propre exception à plusieurs reprises imbriqués les uns dans les autres, à une profondeur arbitraire. Ainsi, par exemple, qu'il va jeter LibraryException -> LibraryException -> LibraryException -> MyException. Mon exception est toujours le dernier sur la chaîne, et ne dispose pas de son propre intérieur d'exception.
  • Oh, je comprends pourquoi vous pourriez étape vers le bas à l'intime, l'ayant fait moi-même (et ses variantes, comme la plus intime qui dérive d'un type particulier), mais je ne comprends pas ce qu'est la question avec ce que vous avez déjà.
  • Oh, je vois ce que tu veux dire. Je me demandais juste si il y avait une autre façon de l'écrire. Je suis tellement habitué à l'utilisation de LINQ à faire à peu près tout ce qu'il me semble bizarre quand je dois écrire une boucle. Je travaille principalement avec les données d'accès donc j'ai assez bien travailler avec ICollections pour presque tout ce que je fais.
  • n'est-ce pas LINQ juste de masquer le fait que le code est essentiellement en boucle? Il n'existe aucun véritable base de jeu commandes .NET?
  • Oui, LINQ de cours utilise des boucles sous les couvertures, mais je n'ai pas à écrire qu'une partie de moi-même. Je préfère écrire list.ForEach(Console.WriteLine) que foreach (var item in list) { Console.WriteLine(item); }.
  • Le plus de la réponse correcte est tapi dans le fond et (actuellement) seulement 2 votes -- Exception.GetBaseException(). Cela a été dans le cadre essentiellement pour toujours. Grâce à batCattle pour la santé mentale-case.
  • stackoverflow.com/a/1456603/1135871 peut également être utile.
  • Peut-être utile gist.github.com/benbrandt22/8676438
  • Double Possible de la Bonne façon de gérer InnerException arbres?

InformationsquelleAutor Daniel T. | 2010-10-06