1

我正在尝试编写一个通用扩展方法,用于将固定矩阵添加到“弹性”矩阵。扩展方法编译并且(我假设)它的代码在常规方法中运行良好。知道我会在各种类型中大量使用这个函数,我更愿意解决这个问题,而不是用创可贴一瘸一拐:

    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?
    }
4

5 回答 5

4

来自MSDN

定义和调用扩展方法

  1. 定义一个静态类来包含扩展方法。该类必须对客户端代码可见。

  2. 将扩展方法实现为至少与包含类具有相同可见性的静态方法。

  3. 方法的第一个参数指定方法操作的类型;它必须以 this 修饰符开头。

您的方法不是静态的(2.)。

于 2012-04-13T18:23:10.300 回答
1

正如每个人都很快指出的那样,扩展方法必须是静态的。

当我试图复制您的错误时,我收到了一个编译器错误“扩展方法必须是静态的”,因此您报告您的代码可以编译对我来说似乎很奇怪。当您尝试编译它时,请查看错误列表以查看它是否实际上是空的。我怀疑您会发现以前没有注意到的错误消息。如果您能够看到编译器错误,那么您的这种性质的错误将很容易识别和修复。

于 2012-04-13T18:33:21.563 回答
1

您正在编写扩展方法,AddMatrix<T>需要是静态的。

于 2012-04-13T18:23:01.013 回答
1

扩展方法必须是静态的。

于 2012-04-13T18:24:14.210 回答
1

扩展方法必须是静态的。

将其更改为: public static void AddMatrix(this List MyList, T[,] Matrix)

并确保该类也是静态的。

于 2012-04-13T18:24:14.460 回答