C#迭代通用对象

我正在使用C#从Excel VBA移到VSTO。 在VBA中,我有一个叫做IsInCollection的3行自定义函数,如下所示:

 On Error Resume Next Set obj = collectionObject(itemObject) IsInCollection = Not (obj is Nothing) 

我一直使用它来检查给定的工作簿是否打开,或者工作簿是否包含具有特定名称的工作表等。因为集合和项目参数被定义为对象,所以它可以与任何东西一起工作。

我正在尝试在托pipe代码中创build相同的实用程序函数/方法,并且正在努力挣扎。 问题是与collectionObject(itemObject)expression式。 C#不允许我像VBA那样索引一个对象。

如果有人能指出我正确的方向,将不胜感激。 从我的search我一直在查看QueryInterface,但不知道如果这是我应该看的地方。 看来,一个Excel对象碰到一个System._ComObject ,所以大概我需要以某种方式(?)迭代。

TIA

我想你想看看LINQ。 例如你可以像查询集合

 IsInCollection = obj.Any(s => s != null); 

C#中的索引操作符是[],not()与VB中的一样。 我不是很熟悉COM,所以如果你拥有的对象只是一个对象/ System._ComObject,你可能必须首先将它转换为合适的types,除非_ComObject已经有一个索引器。

似乎找出什么types的_ComObject真的是有点困难,所以你可能想尝试一下我发现在http://www.mztools.com/articles/2006/mz2006013.aspx

 var typeName = Microsoft.VisualBasic.Information.TypeName( collectionObject ); 

我也怀疑你可以使用System.ComponentModel.TypeDescriptor类。