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
类。