尝试使用某些依赖于Excel VBA中对泛型方法的调用的C#代码给出了错误“-2147467261”。如果我评论使用泛型方法的代码行,它不会给出错误,但显然代码不起作用。
这是我的C#代码接口:
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[Guid("663E1E2C-0436-4B23-BB71-8CCEEB92841A")]
public interface _Interop
{
double Generation();
void SetSeed(int n);
int GetSeed();
void AddCity(int x, int y);
void SetPopulation(int n);
int GetPopulation();
void SetMutation(int n);
int GetMutation();
}
我的中间类用于调用其余代码
[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;
}
}
最重要的是,在代码的后面,使用了Array.Sort和LINQ的扩展方法,并且那些也会抛出相同的错误。
如何在Excel的VBA中使用这些方法?
编辑:
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;
}
}
(...)
}