在 c # 中,“ Where T: class”是什么意思?

在 C # 中,where T : class是什么意思?

我。

public IList<T> DoThis<T>() where T : class
150181 次浏览

“ T”代表一个泛型类型。这意味着它可以接受任何类型的类。下面的文章可能会有所帮助:

http://www.15seconds.com/issue/031024.htm

这是 泛型类型约束泛型类型约束。在这种情况下,它意味着泛型类型 T必须是引用类型(类、接口、委托或数组类型)。

这意味着当使用泛型方法时,作为 T使用的类型必须是一个类——也就是说,它不能是一个结构或内置的数字,如 intdouble

// Valid:
var myStringList = DoThis<string>();
// Invalid - compile error
var myIntList = DoThis<int>();

简单地说,这是将泛型参数约束为一个类(或者更具体地说,可以是类、接口、委托或数组类型的引用类型)。

有关更多细节,请参见此 MSDN 文章

它是 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

有关更多信息,请查看微软的页面 通用参数约束通用参数约束

这将 T限制为 引用类型。您不能将值类型(struct和基元类型除了 string)放在那里。

它被称为类型参数约束。它有效地约束了类型 T 可以是什么。

类型参数必须是引用 类型; 这也适用于任何类, 接口、委托或数组类型。

类型参数的约束(C # 编程指南)

T 表示一个对象类型,这意味着您可以给出任何类型的。 IList: 如果 IList s = new IList; 现在,s.add (“总是接受字符串”)。

字面意思是 < em > 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
}

这里 T 指的是一个 Class,它可以是一个引用类型。