mirror of
https://github.com/jcreek/Creek.HelpfulExtensions.git
synced 2026-07-12 18:53:45 +00:00
feat(*): Add ExceptionExtension class
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace Creek.HelpfulExtensions
|
||||
{
|
||||
public static class ExceptionExtension
|
||||
{
|
||||
/// <summary>
|
||||
/// Returns a string of the message of the first/root/base exception in an exception stack.
|
||||
/// </summary>
|
||||
/// <param name="ex">The Exception stack to find the first/root/base exception within.</param>
|
||||
/// <returns>Returns the first/root/base exception message string.</returns>
|
||||
public static string BaseExceptionMessage(this Exception ex)
|
||||
{
|
||||
Exception baseEx = ex.GetBaseException();
|
||||
return baseEx.Message;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a single string of the message and stack trace of the first/root/base exception in an exception stack.
|
||||
/// </summary>
|
||||
/// <param name="ex">The Exception stack to find the first/root/base exception within.</param>
|
||||
/// <returns>Returns the first/root/base exception message and stack trace as a single string, separated by " :: ".</returns>
|
||||
public static string BaseExceptionMessageAndStackTrace(this Exception ex)
|
||||
{
|
||||
Exception baseEx = ex.GetBaseException();
|
||||
return GenerateMessageAndStackTraceString(baseEx);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a list of the exception messages of each nested exception in an exception stack.
|
||||
/// </summary>
|
||||
/// <param name="ex">The Exception stack.</param>
|
||||
/// <returns>Returns a list of the exception messages of each nested exception in an exception stack.</returns>
|
||||
public static List<string> AllInnerExceptionMessages(this Exception ex)
|
||||
{
|
||||
return GetAllInnerExceptionMessagesAndStackTraces(ex, includeStackTraces: false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a list of single strings of the message and stack trace of each nested exception in an exception stack.
|
||||
/// </summary>
|
||||
/// <param name="ex">The Exception stack.</param>
|
||||
/// <returns>Returns a list with a string for each nested exception in an exception stack containing the exception message and stack trace as a single string, separated by " :: ".</returns>
|
||||
public static List<string> AllInnerExceptionMessagesAndStackTraces(this Exception ex)
|
||||
{
|
||||
return GetAllInnerExceptionMessagesAndStackTraces(ex, includeStackTraces: true);
|
||||
}
|
||||
|
||||
private static List<string> GetAllInnerExceptionMessagesAndStackTraces(Exception ex, bool includeStackTraces)
|
||||
{
|
||||
List<string> exceptionMessagesAndStackTraces = new List<string>();
|
||||
|
||||
Exception inner = ex.InnerException;
|
||||
|
||||
exceptionMessagesAndStackTraces.Add(
|
||||
includeStackTraces ? GenerateMessageAndStackTraceString(ex)
|
||||
: ex.Message);
|
||||
|
||||
while (inner != null)
|
||||
{
|
||||
exceptionMessagesAndStackTraces.Add(
|
||||
includeStackTraces ? GenerateMessageAndStackTraceString(inner)
|
||||
: inner.Message);
|
||||
inner = inner.InnerException;
|
||||
}
|
||||
|
||||
// We've now reached the end of the exceptions, so can return the error messages
|
||||
return exceptionMessagesAndStackTraces;
|
||||
}
|
||||
|
||||
private static string GenerateMessageAndStackTraceString(Exception ex)
|
||||
{
|
||||
return $"{ex.Message} :: {ex.StackTrace}";
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user