It is a 通用类型参数 https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/generic-type-parameters.
泛型类型参数允许您在编译时向方法指定任意类型 T,而无需在方法或类声明中指定具体类型。
例如:
public T[] Reverse<T>(T[] array)
{
var result = new T[array.Length];
int j=0;
for(int i=array.Length - 1; i>= 0; i--)
{
result[j] = array[i];
j++;
}
return result;
}
反转数组中的元素。这里的关键点是数组元素可以是任何类型,并且该函数仍然可以工作。您在方法调用中指定类型;类型安全仍然得到保证。
因此,要反转字符串数组:
string[] array = new string[] { "1", "2", "3", "4", "5" };
var result = Reverse(array);
将产生一个字符串数组result
of { "5", "4", "3", "2", "1" }
这与调用普通(非泛型)方法具有相同的效果,如下所示:
public string[] Reverse(string[] array)
{
var result = new string[array.Length];
int j=0;
for(int i=array.Length - 1; i >= 0; i--)
{
result[j] = array[i];
j++;
}
return result;
}
编译器看到array
包含字符串,因此它返回一个字符串数组。类型string
被替换为T
类型参数。
泛型类型参数也可用于创建泛型类。在你给出的例子中SampleCollection<T>
, the T
是任意类型的占位符;代表着SampleCollection
可以表示对象的集合,其类型是您在创建集合时指定的。
So:
var collection = new SampleCollection<string>();
创建一个可以保存字符串的集合。这Reverse
上面说明的方法(以稍微不同的形式)可用于反转集合的成员。