In c# what does 'where T : class' mean?

C#Syntax

C# Problem Overview


In C# what does where T : class mean?

Ie.

public IList<T> DoThis<T>() where T : class

C# Solutions


Solution 1 - C#

Simply put this is constraining the generic parameter to a class (or more specifically a reference type which could be a class, interface, delegate, or array type).

See this MSDN article for further details.

Solution 2 - C#

It's a type constraint on T, specifying that it must be a class.

The where clause can be used to specify other type constraints, e.g.:

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

For more information, check out MSDN's page on the where clause, or generic parameter constraints.

Solution 3 - C#

It is a generic type constraint. In this case it means that the generic type T has to be a reference type (class, interface, delegate, or array type).

Solution 4 - C#

That restricts T to reference types. You won't be able to put value types (structs and primitive types except string) there.

Solution 5 - C#

where T: class literally means that T has to be a class. It can be any reference type. Now whenever any code calls your DoThis<T>() method it must provide a class to replace T. For example if I were to call your DoThis<T>() method then I will have to call it like following:

DoThis<MyClass>();

If your metthod is like like the following:

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

   // other uses of T as a type

}

Then where ever T appears in your method, it will be replaced by MyClass. So the final method that the compiler calls , will look like the following:

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
 }

Solution 6 - C#

it means that the type used as T when the generic method is used must be a class - i.e. it cannot be a struct or built in number like int or double

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

Solution 7 - C#

It is called a type parameter constraint. Effectively it constraints what type T can be.

> The type argument must be a reference > type; this applies also to any class, > interface, delegate, or array type.

Constraints on Type Parameters (C# Programming Guide)

Solution 8 - C#

T represents an object type of, it implies that you can give any type of. IList : if IList s=new IList; Now s.add("Always accept string.").

Solution 9 - C#

Here T refers to a Class.It can be a reference type.

Solution 10 - C#

'T' represents a generic type. It means it can accept any type of class. The following article might help:

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMakachView Question on Stackoverflow
Solution 1 - C#Andy RoseView Answer on Stackoverflow
Solution 2 - C#DonutView Answer on Stackoverflow
Solution 3 - C#OdedView Answer on Stackoverflow
Solution 4 - C#Vilx-View Answer on Stackoverflow
Solution 5 - C#explorerView Answer on Stackoverflow
Solution 6 - C#Isak SavoView Answer on Stackoverflow
Solution 7 - C#CarlosView Answer on Stackoverflow
Solution 8 - C#AsifQadriView Answer on Stackoverflow
Solution 9 - C#Hemant KumarView Answer on Stackoverflow
Solution 10 - C#Randy MinderView Answer on Stackoverflow