回答:
これはの型制約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詳細については、MSDNのwhere節または汎用パラメーターの制約に関するページをご覧ください。
where T : class, IComparable, new()
                    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
 }new T()は使用できませんwhere T : class。それをwhere T: new()許可するように指定する必要があります。
                    これは、型パラメーター制約と呼ばれます。事実上、それはTの型を制限します。
type引数は参照型でなければなりません。これは、クラス、インターフェイス、デリゲート、または配列型にも適用されます。