我正在使用MemoryStream来添加存储在数据库中的二进制文件的附件。我的问题是我想妥善处理MemoryStream。这很容易使用“using”语句完成,但是当我有多个附件时,我不知道如何正确处理多个MemoryStream。
是否有一种很好的方法来迭代和附加文件,但同时正确处理我用来附加的MemoryStream?当我在使用smtp之前尝试刷新/关闭时。通过一个错误声明流已经关闭。
任何建议都将不胜感激。
答案 0 :(得分:3)
您可以迭代MemoryStream
并处理它们。将处理代码放在finally
块中等于using
语句。
var list = new List<MemoryStream>(){new MemoryStream(), new MemoryStream()};
try
{
//....
}
finally
{
foreach (var x in list)
{
x.Dispose();
}
}
using语句确保即使调用Dispose也会调用 在对象上调用方法时发生异常。您可以 通过将对象放在try块中来实现相同的结果 然后在finally块中调用Dispose;其实这是怎么回事 using语句由编译器翻译。
来自MSDN
答案 1 :(得分:2)
我知道这是旧帖子,但事实证明,处理MailMessage
或将其封闭在using
语句中就足够了,因为MailMessage
处置时所有AttachmentCollection
都是Attachment
也处置Stream
时,using(MailMessage mail = new MailMessage())
{
// Add attachments without worring about disposing them
}
也被处理掉。查看ReferenceSource以获取完整代码。
mvn clean dependency:tree
# or (mvn 3)
mvn clean org.apache.maven.plugins:maven-dependency-plugin:3.0.1:tree
答案 2 :(得分:0)
using (var ms1 = new MemoryStream())
using (var ms2 = new MemoryStream())
{
...
}