C#通用扩展方法编译但不可用?

时间:2012-04-13 18:20:32

标签: c# .net generics methods

我正在尝试编写一个通用的扩展方法,用于将固定矩阵添加到“弹性”矩阵中。扩展方法编译并且(我假设)它的代码在常规方法中工作正常。知道我会为各种类型使用这个功能很多,我更愿意解决这个问题,而不是与创可贴一起跛行:

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

5 个答案:

答案 0 :(得分:4)

来自MSDN

  

定义和调用扩展方法

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

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

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

  6.   

你的方法不是静态的(2。)。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

扩展方法必须是静态的。

答案 3 :(得分:1)

扩展方法必须是静态的。

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

并确保课程也是静态的。

答案 4 :(得分:1)

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

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