C#泛型扩展方法已编译但无法使用?

C#泛型扩展方法已编译但无法使用?,c#,.net,generics,methods,C#,.net,Generics,Methods,我试图编写一个通用的扩展方法,将固定矩阵添加到“弹性”矩阵中。扩展方法编译,并且(我假设)它的代码在常规方法中运行良好。我知道我将在各种类型中大量使用此功能,因此我更愿意解决此问题,而不是带着创可贴蹒跚而行: public void AddMatrix<T>(this List<T[]> MyList, T[,] Matrix) { if (MyList == null) throw new ArgumentNullException("M

我试图编写一个通用的扩展方法,将固定矩阵添加到“弹性”矩阵中。扩展方法编译,并且(我假设)它的代码在常规方法中运行良好。我知道我将在各种类型中大量使用此功能,因此我更愿意解决此问题,而不是带着创可贴蹒跚而行:

    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?
    }
public void AddMatrix(此列表为MyList,T[,]矩阵)
{
如果(MyList==null)抛出新的ArgumentNullException(“MyList”);
如果(矩阵==null)抛出新的ArgumentNullException(“矩阵”);
对于(int i=0;i
您正在编写扩展方法,
AddMatrix
需要是静态的。

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

来自:

定义并调用扩展方法

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

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

  • 方法的第一个参数指定方法操作的类型;它前面必须加上这个修饰符

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

    来自:

    定义并调用扩展方法

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

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

  • 方法的第一个参数指定方法操作的类型;它前面必须加上这个修饰符


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

    扩展方法必须是静态的。

    扩展方法必须是静态的。

    扩展方法必须是静态的

    将其更改为: 公共静态void AddMatrix(此列表为MyList,T[,]矩阵)


    并确保类也是静态的。

    扩展方法必须是静态的

    将其更改为: 公共静态void AddMatrix(此列表为MyList,T[,]矩阵)


    并且确保类也是静态的。

    每个人都很快指出,扩展方法必须是静态的


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

    正如大家很快指出的那样,扩展方法必须是静态的


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

    当您使用它时会发生什么?当您使用它时会发生什么?标记为正确,以包括扩展方法的所有必要要求。我已经做了很多方法,但我想我做这一个的时候完全是脑子放屁了!标记正确,包括扩展方法的所有必要要求。我已经做了很多方法,但我想我做这一个的时候完全是脑子放屁了+我想让你知道我很感激你花时间回答我的问题。我想让你知道我很感激你花时间回答我的问题,虽然感谢您抽出时间回答我的问题。+1对于正确答案,我只能标记一个正确答案。感谢您抽出时间回答我的问题。谢谢您回答我的问题!谢谢你回答我的问题!