自从理解了try catch机制后就有意无意的注意一下优秀的开源软件是如何处理异常捕获和返回值的问题的
下面这段是community server 上的一段代码。
想研究一下他的异常处理机制
Code
public static bool SendMessage(MailMessage message)
{
try
{
CSContext context = CSContext.Current;
// Replace any LF characters with CR LF
message.Body = message.Body.Replace("\r", string.Empty);
message.Body = message.Body.Replace("\n", "\r\n");
// Set the encoding
message.SubjectEncoding = Encoding.GetEncoding(context.SiteSettings.EmailSubjectEncoding);
message.BodyEncoding = Encoding.GetEncoding(context.SiteSettings.EmailEncoding);
// Set the content base
message.Headers["Content-Base"] = context.SiteSettings.SiteUrl;
message.Headers["Content-Location"] = context.SiteSettings.SiteUrl;
// Send it
GetSmtpClient().Send(message);
return true;
}
catch (Exception e)
{
Debug.WriteLine(e.Message + " : " + (e.InnerException != null ? e.InnerException.Message : String.Empty));
CSException fe;
if(message != null && message.To != null)
fe = new CSException(CSExceptionType.EmailUnableToSend, "SendMessage Failed To: " + message.To, (e.InnerException != null ? e.InnerException : e));
else
fe = new CSException(CSExceptionType.EmailUnableToSend, "SendMessage Failed Either Message or To was null: ", (e.InnerException != null ? e.InnerException : e));
fe.Log(CSContext.Current.SiteSettings.SettingsID);
return false;
}
}
public static bool SendMessage(MailMessage message)
{
try
{
CSContext context = CSContext.Current;
// Replace any LF characters with CR LF
message.Body = message.Body.Replace("\r", string.Empty);
message.Body = message.Body.Replace("\n", "\r\n");
// Set the encoding
message.SubjectEncoding = Encoding.GetEncoding(context.SiteSettings.EmailSubjectEncoding);
message.BodyEncoding = Encoding.GetEncoding(context.SiteSettings.EmailEncoding);
// Set the content base
message.Headers["Content-Base"] = context.SiteSettings.SiteUrl;
message.Headers["Content-Location"] = context.SiteSettings.SiteUrl;
// Send it
GetSmtpClient().Send(message);
return true;
}
catch (Exception e)
{
Debug.WriteLine(e.Message + " : " + (e.InnerException != null ? e.InnerException.Message : String.Empty));
CSException fe;
if(message != null && message.To != null)
fe = new CSException(CSExceptionType.EmailUnableToSend, "SendMessage Failed To: " + message.To, (e.InnerException != null ? e.InnerException : e));
else
fe = new CSException(CSExceptionType.EmailUnableToSend, "SendMessage Failed Either Message or To was null: ", (e.InnerException != null ? e.InnerException : e));
fe.Log(CSContext.Current.SiteSettings.SettingsID);
return false;
}
}
这里的处理比较特殊再try catch内部返回bool型的值。跟踪了一下这个方法的调用 发现使用这个方法的地方存在bool判断。这里不便依靠抛出异常来处理。这么处理放到更方便一些。