ユーザーが希望するタイプのリストを返すメソッドを作成しようとしています。これを行うにはジェネリックスを使用していますが、これはあまりよく知られていないので、この質問は明白かもしれません。問題は、このコードは動作しないということで、エラーメッセージCannot convert type Systems.Collections.Generic.List<CatalogueLibrary.Categories.Brand> to Systems.Collection.Generic.List<T>
リストを使用することはできますがIListを使用することはできません。
private List<T> ConvertToList<T>(Category cat)
{
switch (cat)
{
case Category.Brands:
return (List<T>)collection.Brands.ToList<Brand>();
}
...
}
をスローしかし、私は代わりにIList
を使用している場合、エラーはありません。
private IList<T> ConvertToList<T>(Category cat)
{
switch (cat)
{
case Category.Brands:
return (IList<T>)collection.Brands.ToList<Brand>();
}
...
}
なぜこのリストではなくIListを使用できますか? collection.Brandsは、第三者図書館からBrandCollection
型を返します。したがって、その作成方法はわかりません。 BrandCollection
はIListから派生しているかもしれません(ちょうどそのことを推測している)ので、それを通常のListに変換することはできますか?
あなたは型制約をそこに置くべきです!あなたは、まるで卑劣なものをキャスティングするだけでは行けません。 – antonijn
2番目の例が 'return(IList)collection.Brands.ToList ();'ではありませんか? –
Matthew
これが働いた後、私は見ていきました。私はジェネリックに少し新しかったので、それが後で何か他のものを壊したときにそれを残すと思った:D制約は 'どこT:ブランド'(および他のカテゴリ)であろうか? – XSL