仅仅为了争论,让我们假设你使用的是 附件 集合,这个集合实现了IEnumerable。 这个集合实现了IEnumerable。
如果我们要做这样的事情,幕后到底发生了什么?"通过集合的每一次迭代都会创建一个不能释放的 "AttachmentS "对象吗?
void SomeEventHandler( Attachments attachments, object args )
{
Outlook._Attachment attachment = attachments.First( x => x.Subject == "I like COM" );
// do stuff
Marshal.ReleaseComObject(attachment);
}
对 第一 将迭代COM对象的集合。 它是否会像 读取 并造成我们无法释放的COM引用?
它会不会像foreach一样,造成我们无法释放的COM引用?
是的,会的。使用 for
循环与代码中的释放语句代替。不建议对Office RCW对象使用LINQ、lambda表达式等。继而无法及时释放COM对象。
为了了解 First
我建议查看.net框架编译器生成的CIL(或MSIL)代码。