Любые "реальные" вложенные исключения, которые легко преднамеренно вызвать в C#?

Я работаю над улучшением обработки ошибок, а также изучаю nLog. Я хотел бы быть в состоянии вызвать некоторые "реальные" ошибки, чтобы проверить, что делает моя обработка ошибок. Есть ли какие-либо, которые легко преднамеренно вызвать, которые будут иметь внутренние исключения, особенно многоуровневые? Например, я уже делал такие вещи, как деление на 0 и SQL-запросы к несуществующим таблицам, но ни у одного из них нет внутреннего исключения.

3 ответа

Решение

Вы могли бы использовать Task.Run(() => throw new Exception()); например. Это бросит AggregateException который будет содержать исключение как внутреннее исключение. Вызов вещей, которые генерируют исключения через отражение, также вызовет TargetInvocationException быть брошенным, содержащим фактическое исключение как внутреннее исключение.

С использованием XmlSerializer десериализация неверного XML-файла обычно производит более глубоко вложенную иерархию ошибок, если я правильно помню.

Например, следующая программа сгенерирует исключение на три уровня:

public class MyClass
{
   [XmlElement("Element")]
   int Element { get; set; }

}
class Program
{
   static void Main(string[] args)
   {
      string xml = "<Element>String</Element>";
      XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
      serializer.Deserialize(new StringReader(xml));
   }
}

Но, безусловно, самым простым решением, конечно, является создание собственного вложенного исключения.

Вы можете создавать свои собственные вложенные исключения для n-й степени.

throw new Exception("1", new Exception("2", new Exception("3")));

Поиск "XAMLParseException" - вызвать некоторые ошибки в конструкторе окон WPF. Вы найдете много примеров.

Другие вопросы по тегам