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语句确保处置是即使当你调用对象的方法发生异常调用。您可以通过将对象try块内达到同样的效果然后在finally块中调用Dispose;实际上,这就是编译器翻译using语句的方式。前面的代码示例在编译时展开为以下代码(请注意额外的大括号来为对象创建有限的作用域):“
消息应该已经超出范围并可能处置。
“最后的括号(4线从底部)关闭使用声明。“不,它没有。它关闭声明,然后开始实际的语句块(包含单个语句“smtp.Send”)。 –
'smtp.Send(message)'位于'using'块中。之前的'{}'只是MailMessage的初始化。 –
我已将代码重新格式化,以使上述评论清楚:) –