将C#列表传递给VBA

我正在用C#编写一个在VBA中使用的DLL。 我写的一个方法将获得一个自定义types的列表(PdfReaderPage)。 我的问题是这样的:我可以传递一个自定义types的列表到VB集合? 我有这个想法做

public Microsoft.VisualBasic.Collection GetPageByKeyWord(String keyword) { //Do some code to find correct page list //Get List<PdfReaderPage> myList Microsoft.VisualBasic.Collection VbCollection = myList; return VbCollection; } 

除了我不确定我是否可以A.)把一个列表转换成一个集合或B.)我甚至以这个最好的方式。

A)将列表转换为集合,可以这样做:

 [ClassInterface(ClassInterfaceType.AutoDual)] public class PdfReaderPage { public int Foo; } [ClassInterface(ClassInterfaceType.AutoDual)] public class AccessibleFromVBA { public Microsoft.VisualBasic.Collection PdfReaderPages() { /* 1. make a List of PdfReaderPage elements */ var csharp_list = new List<PdfReaderPage>() { new PdfReaderPage() {Foo=1}, new PdfReaderPage() {Foo=2}, new PdfReaderPage() {Foo=3} }; /* 2. convert it into a vb collection */ var vb_coll = new Microsoft.VisualBasic.Collection(); csharp_list.ForEach(x => vb_coll.Add(x)); /* 3. deliver it */ return vb_coll; } } 

只有一件好奇的事情要注意:在C#中,Collection实例实际上会包含比Count报告更多的项目,因为集合在C#中基于0,在VBA中基于1,索引[0]中的项目总是包含静态本地化string“空占位符来调整基于1的数组”。