sca*_*cci 5 .net c# idisposable memorystream using-statement
我正在使用MemoryStream从存储在数据库中的二进制文件中添加附件。我的问题是我想正确处理MemoryStream。使用“ using”语句很容易做到这一点,但是当我有多个附件时,我不知道如何正确处理多个MemoryStream。
有没有很好的方法可以遍历并附加文件,但是同时正确处理了我要附加的MemoryStreams?当我尝试在使用smtp之前刷新/关闭时,通过错误发送它,指出流已经关闭。
任何建议,将不胜感激。
我知道这是旧帖子,但事实证明,处置MailMessage或仅将其包含在using语句中就足够了,因为何时MailMessage处置所有AttachmentCollection也已处置,何时Attachment处置Stream也已处置。查看ReferenceSource以获取完整代码。
using(MailMessage mail = new MailMessage())
{
// Add attachments without worring about disposing them
}
Run Code Online (Sandbox Code Playgroud)
您可以迭代MemoryStreams 并处理它们。将处理代码放在finallyequals tousing语句块中。
var list = new List<MemoryStream>(){new MemoryStream(), new MemoryStream()};
try
{
//....
}
finally
{
foreach (var x in list)
{
x.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
using 语句可确保即使在调用对象方法时发生异常,也会调用 Dispose。您可以通过将对象放入 try 块中,然后在 finally 块中调用 Dispose 来实现相同的结果;事实上,这就是编译器翻译 using 语句的方式。
来自MSDN
| 归档时间: |
|
| 查看次数: |
3000 次 |
| 最近记录: |