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

C# 泛型扩展方法可编译但不可用

来自 MSDN:

定义和调用扩展方法

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

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

  3. 该方法
  4. 的第一个参数指定该方法操作的类型;它前面必须带有 this 修饰符。

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

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

扩展方法必须是静态的。

扩展方法必须是静态的。

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

并确保类也是静态的。

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

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