【发布时间】:2016-02-29 20:03:09
【问题描述】:
我不太确定如何提出这个问题。我真的希望我能正确解释我的问题。
我的 Windows 服务中分布有多个自定义异常,我想将它们返回给启动流程步骤的主流程。
例如,我有静态类 PropertyMapper,它使用反射来读取电子邮件标题并将它们反映到特定属性。现在,如果出现异常,我想添加其他信息。就像 headerattribute 实际导致异常一样,但我不想丢失“实际”异常。
目前看起来是这样的:
try
{
PropertyInfo pInfo = prop.Property;
Type t = Nullable.GetUnderlyingType(pInfo.PropertyType) ?? pInfo.PropertyType;
object safeValue = (headerAttribute.Value == null) ? null : Convert.ChangeType(headerAttribute.Value, t);
pInfo.SetValue(mailDataObj, safeValue, null);
}
catch (Exception e)
{
throw new PropertyMappingFailedException(headerAttribute.Field, headerParam);
}
我抛出异常以将其带回主进程,因此我只需执行一次“创建 logEntry-logic”。 '
try
{
mailDataObj = PropertyMapper.MapProperties(mailItem);
mailDataObj.MailItem = mailItem;
controller = new DAKMailController(mailDataObj);
controller.SetBasicData(procFile);
controller.HandlePostProcessing();
}
catch (Exception e)
{
controller.CreateLogEntry(e);
moveFileToError(file);
}
现在我最初咳嗽的异常当然丢失了,因为我没有将它添加到我的自定义异常中,但是我该怎么做呢?另外,我的思维方式是对的还是我必须以其他方式处理异常?
我已经用 google 搜索了一下,但找不到有用的东西。我会很感激一些帮助。 :)
附:我提取了 CreateLogEntry 方法中的所有 InnerExceotions 并将它们放入单个字符串变量中。
【问题讨论】: