Вы не можете сделать это непосредственно (если VS делает ваш COM регистрации, вы должны увидеть предупреждение, как: тип библиотеки экспортер обработки предупредительного «NS.Obj. get_GetProp2 (# 1), Assy '. Предупреждение: экспортер библиотеки типов столкнулся с экземпляром универсального типа в сигнатуре. Общий код не может быть экспортирован в COM.
Что вам нужно сделать, это сделать небольшую не общую обертка и интерфейс для вывода на COM (при условии, что вы хотите строго типизированные объекты). Пока вы ссылки на TypeLib в VBA и получить доступ к объектам через строго типизированные VBA реф, вы можете сделать что-то вроде:
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.AutoDual)]
public class Class1
{
public IMyListOfString Strings {get; set;}
public Class1()
{
Strings = new MyListOfString() { "Foo", "Bar", "Baz" };
}
}
[ComDefaultInterface(typeof(IMyListOfString))]
public class MyListOfString : List<string>, IMyListOfString { }
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IMyListOfString
{
[DispId(0)]
string this[int idx] { get; set; }
}
Там трюк, чтобы получить эту работу без ссылки на управляемый TypeLib в VBA (например, latebound), тоже, но я слишком долго не был в мире взаимодействия COM, чтобы помнить, что это такое.
Предупреждение предлагает исправить это, например, в ответе @Matt Davis – Dude0001