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的初始化。 –
我已將代碼重新格式化,以使上述評論清楚:) –