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

问题描述 投票:125回答:10

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

public IList<T> DoThis<T>() where T : class
c# syntax
10个回答
107
投票

简而言之,这是将通用参数限制为一个类(或更具体地,可以是类,接口,委托或数组类型的引用类型)。

请参阅此MSDN article了解更多详细信息。


1
投票

'T'表示通用类型。这意味着它可以接受任何类型的类。以下文章可能会有所帮助:

Constraints on Type Parameters (C# Programming Guide)

37
投票

它是generic type constraint。在这种情况下,这意味着通用类型T必须是引用类型(类,接口,委托或数组类型)。


34
投票

这是对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 clausewhere上查看MSDN页面。


14
投票

generic parameter constraints限制为引用类型。您将无法在其中放置值类型(T和基本类型,但struct除外)。


9
投票

这意味着使用通用方法时用作string的类型必须是一个类-即它不能是结构或内置数字,例如Tint

double

8
投票

// Valid: var myStringList = DoThis<string>(); // Invalid - compile error var myIntList = DoThis<int>(); 字面意思是[where T: class。它可以是任何引用类型。现在,无论何时任何代码调用您的T has to be a class方法,它都必须提供一个类来替换T。例如,如果我要调用您的DoThis<T>()方法,则必须按以下方式调用它:

DoThis<T>()

如果您的方法类似于以下内容:

DoThis<MyClass>();

然后在您的方法中出现T的地方,它将被MyClass替换。因此,编译器调用的最终方法将如下所示:

public IList<T> DoThis<T>() where T : class
{
   T variablename = new T();

   // other uses of T as a type

}

4
投票

这称为类型参数约束。有效地限制了T可以是什么类型。

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

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 }


4
投票

T代表的对象类型,它表示可以赋予任何类型。IList:如果IList s = new IList;现在s.add(“始终接受字符串。”)。


2
投票

这里T表示一个类。它可以是一个引用类型。

© www.soinside.com 2019 - 2024. All rights reserved.