考虑以下代码片段:
foreach (var setting in RequiredSettings)
{
try
{
if (!BankSettings.Contains(setting))
{
throw new Exception("Setting " + setting + " is required.");
}
}
catch (Exception e)
{
catExceptions.Add(e);
}
}
}
if (catExceptions.Any())
{
throw new AggregateException(catExceptions);
}
}
catch (Exception e)
{
BankSettingExceptions.Add(e);
}
if (BankSettingExceptions.Any())
{
throw new AggregateException(BankSettingExceptions);
}
catExceptions是我添加的例外列表。当循环完成后,我将获取该列表并将它们添加到AggregateException然后抛出它。当我运行调试器时,catExceptions集合中会出现每个字符串消息“需要设置X”。但是,当归结为AggregateException时,现在唯一的消息是“发生了一个或多个错误”。
有没有一种方法可以在保留个别消息的同时进行聚合?
谢谢!
答案 0 :(得分:5)
有没有一种方法可以在保留个别消息的同时进行聚合?
是。 InnerExceptions属性将包含所有异常及其消息。
您可以根据需要显示这些内容。例如:
try
{
SomethingBad();
}
catch(AggregateException ae)
{
foreach(var e in ae.InnerExceptions)
Console.WriteLine(e.Message);
}
答案 1 :(得分:2)
上面的海报给出了正确答案,但是使用foreach循环可以使用.handle()
方法。
try
{
SomethingBad();
}
catch(AggregateException ae)
{
ae.handle(x => {
Console.WriteLine(x.Message);
return true;
});
}