编译错误:使用泛型类型需要N类型参数

时间:2017-06-29 07:22:00

标签: c# generics delegates

我正在阅读," C#in a Nutshell"我来到Advanced C#的第一个主题:代表。

这个简单的代码工作

using System;

namespace prueba
{
class Program
{
    public delegate int Transformer(int x);

    static void Main(string[] args)
    {
        Transformer t = Square;
        t += Cube;
        int result = t(3);
        Transform(5, Square);
        Console.WriteLine(result);
        Console.Read();
    }

    static int Square(int x) => x * x;


    static int Cube(int x) => x * x * x;

    public static void Transform(int x, Transformer t){
        t(x);
    }
  }
} //prints => 27

当我尝试使用此代码使用泛型时

using System;

namespace prueba
{
class Program
{
    public delegate int Transformer<T>(T arg);

    static void Main(string[] args)
    {
        Transformer t = Square; // Compilation Error at this lane
        t += Cube;
        int result = t(3);
        Transform(5, Square);
        Console.WriteLine(result);
        Console.Read();
    }

    static int Square(int x)
    {
        Console.WriteLine(x);
        return 0;
    }

    static int Cube(int x) => x * x * x;

    public static void Transform<T>(T x, Transformer<T> t){
        t(x);
    }
  }
}

我无法编译:this

我对此非常陌生并且我没有得到什么意味着我需要1个类型的参数,当我唯一能做的就是改变通用的int类型委托(T) 。有人能帮助我吗?

2 个答案:

答案 0 :(得分:2)

这意味着您的变量类型在定义时需要一个类型参数:

onSumbit(e){
    this.testing(e);
}

另一方面,您确定需要在这里使用通用方法吗?或者除了Transformer<int> t = Square; 之外,代表还会采取其他类型的论点吗?

答案 1 :(得分:2)

正如错误消息所述,您尝试使用泛型类型Transformer<T>而不指定任何/所有泛型参数。

这是不允许的。

您的代码行必须指定您要使用的T

Transformer<int> t = Square;