Answers:
这是对的类型约束T
,指定它必须是一个类。
该where
子句可用于指定其他类型约束,例如:
where T : struct // T must be a struct
where T : new() // T must have a default parameterless constructor
where T : IComparable // T must implement the IComparable interface
where T : class, IComparable, new()
这意味着使用T
泛型方法时使用的类型必须是一个类-即它不能是结构或内置数字,例如int
或double
// Valid:
var myStringList = DoThis<string>();
// Invalid - compile error
var myIntList = DoThis<int>();
where T: class
字面上的意思是T has to be a class
。它可以是任何引用类型。现在,只要任何代码调用您的DoThis<T>()
方法,它必须提供一个类来代替牛逼。例如,如果我要调用您的DoThis<T>()
方法,则必须像下面这样调用它:
DoThis<MyClass>();
如果您的方法如下所示:
public IList<T> DoThis<T>() where T : class
{
T variablename = new T();
// other uses of T as a type
}
然后在您的方法中出现T的任何地方,它将被MyClass代替。因此,编译器调用的最终方法将如下所示:
public IList<MyClass> DoThis<MyClass>()
{
MyClass variablename= new MyClass();
//other uses of MyClass as a type
// all occurences of T will similarly be replace by MyClass
}
new T()
无法使用where T : class
。您必须指定where T: new()
允许这样做。
T代表的对象类型,它暗示您可以给出任何类型。IList:如果IList s = new IList; 现在s.add(“始终接受字符串。”)。
这里T表示一个Class,它可以是一个引用类型。