在C#中where T : class
是什么意思?
IE中。
public IList<T> DoThis<T>() where T : class
答案 0 :(得分:97)
简单地说,这是将泛型参数约束到一个类(或者更具体地说是一个可以是类,接口,委托或数组类型的引用类型)。
有关详细信息,请参阅此MSDN article。
答案 1 :(得分:37)
这是generic type constraint。在这种情况下,它意味着泛型类型T
必须是引用类型(类,接口,委托或数组类型)。
答案 2 :(得分:33)
这是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
clause或generic parameter constraints上的MSDN页面。
答案 3 :(得分:13)
这会将T
限制为引用类型。您将无法在其中放置值类型(struct
和基本类型,除了string
)。
答案 4 :(得分:9)
这意味着当使用泛型方法时,用作T
的类型必须是一个类 - 即它不能是结构或内置数字,如int
或double
// Valid:
var myStringList = DoThis<string>();
// Invalid - compile error
var myIntList = DoThis<int>();
答案 5 :(得分:7)
where T: class
字面意思是 T has to be a class
。它可以是任何引用类型。现在,只要有任何代码调用您的DoThis<T>()
方法,它就必须提供一个类来替换 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
}
答案 6 :(得分:4)
它被称为类型参数约束。实际上它限制了T的类型。
type参数必须是引用 类型;这也适用于任何类, 接口,委托或数组类型。
答案 7 :(得分:4)
T代表一个对象类型,它暗示你可以给出任何类型的。 IList:如果IList s =新的IList; 现在s.add(“总是接受字符串。”)。
答案 8 :(得分:2)
这里T指的是Class.It可以是引用类型。
答案 9 :(得分:1)
'T'代表通用类型。这意味着它可以接受任何类型的类。以下文章可能有所帮助:
http://www.15seconds.com/issue/031024.htm