Can someone explain what this extension method is exatly doing? public static IEnumerable<Exception> AllExceptions(this Exception ex) { while (ex != null) { yield return ex; ex = ex.InnerException; } }