var smtp = new SmtpClient
{
Host =smtpHost,
Port = smtpPort,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddress.Address, mailFromPassword)
};
using (var message = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body,
}
)
{
smtp.Send(message);
}
最后一个括号(从底部算起 4 行)关闭 using 语句。我必须在这里遗漏一些明显的东西,但是代码可以编译,通过 resharper 并且 var 消息在 using 语句之外使用。事实上,如果我把它放在 using 语句中,它就无法构建。
事实上从这个https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/using-statement
“using 语句确保即使在调用对象上的方法时发生异常也会调用 Dispose。您可以通过将对象放在 try 块中,然后在 finally 块中调用 Dispose 来获得相同的结果;事实上,这是编译器如何翻译 using 语句。前面的代码示例在编译时扩展为以下代码(注意额外的花括号以创建对象的有限范围):“
消息应该已经超出范围并且可能已处置。