我是否正确使用C#using语句?

时间:2017-01-29 16:08:29

标签: c#

SmtpClient和MailMessage都实现了IDisposable,所以我想让我的代码像这样

using (SmtpClient smtpClient = new SmtpClient("xxx", 587))
{
    smtpClient.Credentials = new System.Net.NetworkCredential("email", "pass");
    smtpClient.EnableSsl = true;

    using (MailMessage mail = new MailMessage())
    {
        mail.Subject = "subject";
        mail.From = new MailAddress("email", "name");
        mail.To.Add(new MailAddress("email"));
        mail.Body = "body";
        mail.IsBodyHtml = true;

        smtpClient.Send(mail);
    }  
}

我使用2个using语句正确使用,还是只需要第一个using语句?

感谢

2 个答案:

答案 0 :(得分:1)

使用多个using语句没有任何内在错误。它将对象的生命周期保持在最低限度,这不是一件坏事。

答案 1 :(得分:1)

在嵌套using语句时,在没有缩进的情况下执行此操作更为惯用:

using (SmtpClient smtpClient = new SmtpClient("xxx", 587))
using (MailMessage mail = new MailMessage())
{
    smtpClient.Credentials = new System.Net.NetworkCredential("email", "pass");
    smtpClient.EnableSsl = true;

    mail.Subject = "subject";
    mail.From = new MailAddress("email", "name");
    mail.To.Add(new MailAddress("email"));
    mail.Body = "body";
    mail.IsBodyHtml = true;

    smtpClient.Send(mail);
}

这并不总是可行,因为有时您需要在第一个和第二个using之间进行一些处理。不过,它适用于你的例子。