使用泛型从C#dll调用函数时出现错误-2147467261

使用泛型从C#dll调用函数时出现错误-2147467261,c#,excel,vba,C#,Excel,Vba,试图使用一些依赖于对Excel的VBA中的泛型方法进行调用的C#代码会给我带来错误“-2147467261”。如果我对使用泛型方法的代码行进行注释,它不会给出错误,但显然代码不起作用 这是我的C#代码界面: 还有我的中间类,用于调用其余的代码 [ClassInterface(ClassInterfaceType.None)] [Guid("F8827AA5-2983-4885-AEB8-F873562A146F")] [ProgId("GeneticAlgorithmTSP.Interop")]

试图使用一些依赖于对Excel的VBA中的泛型方法进行调用的C#代码会给我带来错误“-2147467261”。如果我对使用泛型方法的代码行进行注释,它不会给出错误,但显然代码不起作用

这是我的C#代码界面:

还有我的中间类,用于调用其余的代码

[ClassInterface(ClassInterfaceType.None)]
[Guid("F8827AA5-2983-4885-AEB8-F873562A146F")]
[ProgId("GeneticAlgorithmTSP.Interop")]
public class Interop : _Interop
{
    (...)
    public void SetPopulation(int n)
    {
        SimpleSubjects.Randomize(n);
    }
    (...)
}
randomize函数对数组调用此扩展泛型方法以将其洗牌

public static void Shuffle<T>(this IList<T> list)
{
    int n = list.Count;
    while (n > 1)
    {
        n--;
        int k = rng.Next(n + 1);
        T value = list[k];
        list[k] = list[n];
        list[n] = value;
    }
}
publicstaticvoidshuffle(此IList列表)
{
int n=list.Count;
而(n>1)
{
n--;
int k=下一个(n+1);
T值=列表[k];
列表[k]=列表[n];
列表[n]=值;
}
}
除此之外,在代码的后面部分,使用了Array.Sort和LINQ的扩展方法,这些方法也会抛出相同的错误

如何使用Excel的VBA中的这些方法

编辑:

公共静态类SimpleSubjects
{
公共静态int[]Tours{get;private set;}
公共静态无效随机化(int amount)
{
int cities=SimpleCities.cities.Length;
Tours=新整数[amount][];
对于(int i=0;i
是否缺少
Cast
功能,例如
list.OfType()或.Cast()
随机化功能在哪里?你想向COM公开泛型类型吗?代码在C#上运行时没有问题,从VBA调用时失败,让我用Randomizi扩展我的帖子我怀疑这是同一个问题:嘿,顺便说一句,
interfaceIDispatch
只允许
后期绑定
,但在VBA中,你似乎提前绑定了COM类。。。怎么回事
public static void Shuffle<T>(this IList<T> list)
{
    int n = list.Count;
    while (n > 1)
    {
        n--;
        int k = rng.Next(n + 1);
        T value = list[k];
        list[k] = list[n];
        list[n] = value;
    }
}
public static class SimpleSubjects
{
    public static int[][] Tours { get; private set; }

    public static void Randomize(int ammount)
    {
        int cities = SimpleCities.Cities.Length;
        Tours = new int[ammount][];

        for (int i = 0; i < ammount; i++) {
            var Order = new int[cities];
            for (int j = 0; j < cities; j++)
            {
                Order[j] = j;
            }
            Order.Shuffle();
            Tours[i] = Order;
        }
    }
    (...)
}