我正在尝试编写一个通用的扩展方法,用于将固定矩阵添加到“弹性”矩阵中。扩展方法编译并且(我假设)它的代码在常规方法中工作正常。知道我会为各种类型使用这个功能很多,我更愿意解决这个问题,而不是与创可贴一起跛行:
public void AddMatrix<T>(this List<T[]> MyList, T[,] Matrix)
{
if (MyList == null) throw new ArgumentNullException("MyList");
if (Matrix == null) throw new ArgumentNullException("Matrix");
for (int i = 0; i < Matrix.GetLength(0); i++)
{
T[] aLine = new T[Matrix.GetLength(1)];
for (int j = 0; j < Matrix.GetLength(1); j++)
aLine[j] = Matrix[i, j];
MyList.Add(aLine);
}
}
public void testAddMatrix()
{
List<string[]> aMyBigMatrix = new List<string[]>();
string[,] aSmallerMatrix =
{
{
"foo",
"bar",
"what"
}
};
aMyBigMatrix.AddMatrix(aSmallerMatrix); // .AddMatrix is not showing up here in Intellisense?
}
答案 0 :(得分:4)
来自MSDN:
定义和调用扩展方法
定义一个包含扩展方法的静态类。该类必须对客户端代码可见。
将扩展方法实现为静态方法,其可见性至少与包含类相同。
- 醇>
方法的第一个参数指定方法操作的类型;它必须以此修饰符开头。
你的方法不是静态的(2。)。
答案 1 :(得分:1)
您正在编写扩展方法,AddMatrix<T>
需要是静态的。
答案 2 :(得分:1)
扩展方法必须是静态的。
答案 3 :(得分:1)
扩展方法必须是静态的。
将其更改为: public static void AddMatrix(此List MyList,T [,] Matrix)
并确保课程也是静态的。
答案 4 :(得分:1)
每个人都很快指出,扩展方法必须是静态的。
当我试图复制你的错误时,我得到了一个编译错误“扩展方法必须是静态的”,所以你报告你的代码编译似乎很奇怪。当您尝试编译它时,请查看错误列表以查看它是否实际为空。我怀疑您会发现之前没有注意到的错误消息。如果您能够看到编译器错误,那么这种性质的错误将很容易识别和修复。