我正在阅读," 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);
}
}
}
我对此非常陌生并且我没有得到什么意味着我需要1个类型的参数,当我唯一能做的就是改变通用的int类型委托(T) 。有人能帮助我吗?
答案 0 :(得分:2)
这意味着您的变量类型在定义时需要一个类型参数:
onSumbit(e){
this.testing(e);
}
另一方面,您确定需要在这里使用通用方法吗?或者除了Transformer<int> t = Square;
之外,代表还会采取其他类型的论点吗?
答案 1 :(得分:2)
正如错误消息所述,您尝试使用泛型类型Transformer<T>
而不指定任何/所有泛型参数。
这是不允许的。
您的代码行必须指定您要使用的T
:
Transformer<int> t = Square;