Любые "реальные" вложенные исключения, которые легко преднамеренно вызвать в 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. Вы найдете много примеров.