C# 泛型扩展方法可编译但不可用
本文关键字:编译 扩展 方法 泛型 | 更新日期: 2023-09-27 18:31:14
我正在尝试编写一个通用的扩展方法,用于将固定矩阵添加到"弹性"矩阵。扩展方法编译并且(我假设)其代码在常规方法中工作正常。知道我将在各种类型的类型中大量使用此功能,我更愿意解决这个问题,而不是带着创可贴一瘸一拐:
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?
}
来自 MSDN:
定义和调用扩展方法
定义一个静态类以包含扩展方法。该类必须对客户端代码可见。
- 该方法
将扩展方法实现为至少与包含类具有相同可见性的静态方法。
的第一个参数指定该方法操作的类型;它前面必须带有 this 修饰符。
您的方法不是静态的 (2.)。
您正在编写扩展方法,AddMatrix<T>
必须是静态的。
扩展方法必须是静态的。
扩展方法必须是静态的。
将其更改为:public static void AddMatrix(this list MyList, T[,] Matrix)
并确保类也是静态的。
正如每个人都很快指出的那样,扩展方法必须是静态的。
当我尝试复制您的错误时,我收到编译器错误"扩展方法必须是静态的",因此您报告代码编译对我来说似乎很奇怪。当您尝试编译它时,请查看错误列表以查看它是否实际上为空。我怀疑您会发现以前没有注意到的错误消息。如果您能够看到编译器错误,则这种性质的错误将很容易识别和修复。