Category Archives: .net

[C#]The type parameter ‘T’ cannot be used with the ‘as’ operator と言われたら

超まとめ

ジェネリッククラスでasを使って型キャストしようとしてコンパイラーに「Tyep type parameter ‘T’ cannnot be used with the ‘as’ operator be cause it does not have classs type constraint nor a ‘class’ constraint」と言われたら、コンパイラーがキャスト先がクラス(参照型)かどうかがわからなくて困っているので、ジェネリッククラス宣言にclassの型パラメータ制約を付ければOK。

public class Example<T>
{
 public async Task<T> ExampleMethod()
  {
  //..... some codes .....
   
    var dao = serializer.ReadObject(await streamTask) as T;  //← error 
    return dao;
  }
}
public class Example<T> where T : class  //← add class constraint
{
 public async Task<T> ExampleMethod()
  {
  //..... some codes .....
   
    var dao = serializer.ReadObject(await streamTask) as T;
    return dao;
  }
}

参照情報