Метод GetBaseException
Метод GetBaseException обходит цепочку
InnerException и возвращает последнее
звено - не обёртку с текстом "outer".
Если вложенности нет, вернётся тот же объект.
Связано со свойством
InnerException.
Синтаксис
Exception baseEx = ex.GetBaseException();
Пример
Давайте дойти до внутреннего Message:
using System;
class Program
{
static void Main()
{
try
{
var inner = new Exception("abcde");
var outer = new Exception("outer", inner);
throw outer;
}
catch (Exception ex)
{
Console.WriteLine(ex.GetBaseException().Message);
}
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте пройти цепочку из трёх уровней:
using System;
class Program
{
static void Main()
{
try
{
var level1 = new Exception("abcde");
var level2 = new Exception("mid", level1);
var level3 = new Exception("outer", level2);
throw level3;
}
catch (Exception ex)
{
Console.WriteLine(ex.GetBaseException().Message);
}
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте сравнить GetBaseException с верхним Message:
using System;
class Program
{
static void Main()
{
try
{
var inner = new Exception("12345");
throw new Exception("outer", inner);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine(ex.GetBaseException().Message);
}
}
}
Результат выполнения кода:
"outer"
"12345"
Смотрите также
-
свойство
InnerException,
которое строит цепочку -
свойство
Message,
которое читают у базового сбоя -
класс
Exception,
на котором вызывают GetBaseException -
конструкция
catch,
где анализируют цепочку