Ich versuche, eine Methode zu erstellen, die eine Liste des beliebigen Typs zurückgibt, den der Benutzer möchte. Um dies zu tun, verwende ich Generika, mit denen ich nicht so vertraut bin, also kann diese Frage offensichtlich sein. Das Problem ist, dass dieser Code nicht und wirft die Fehlermeldung Cannot convert type Systems.Collections.Generic.List<CatalogueLibrary.Categories.Brand> to Systems.Collection.Generic.List<T>
Kann IList verwenden, aber nicht List in generischer Methode
private List<T> ConvertToList<T>(Category cat)
{
switch (cat)
{
case Category.Brands:
return (List<T>)collection.Brands.ToList<Brand>();
}
...
}
funktioniert Aber wenn ich IList
stattdessen verwenden, gibt es keine Fehler.
private IList<T> ConvertToList<T>(Category cat)
{
switch (cat)
{
case Category.Brands:
return (IList<T>)collection.Brands.ToList<Brand>();
}
...
}
Warum kann ich in diesem Fall IList aber nicht List verwenden? collection.Brands gibt einen BrandCollection
Typ aus einer Third-Party-Bibliothek zurück, so dass ich nicht weiß, wie das erstellt wird. Könnte es sein, dass BrandCollection
von IList abgeleitet werden kann (nur raten, dass es tut) und so kann es in es konvertiert werden, aber nicht in eine normale Liste?
Sie sollten Typengpässe dort passen! Du kannst nicht einfach so herumstochern, um Zeug zu machen. – antonijn
Sind Sie sicher, dass Ihr zweites Beispiel nicht zurückgegeben wird (IList) collection.Brands.ToList (); '? –
Matthew
Ich wollte sehen, ob das funktioniert hat. Ich bin ein wenig neu bei Generika, dachte mir, dass ich das bis später lassen würde, falls es etwas anderes kaputt machen würde: D Wäre der Zwang "wo T: Brand" (und die anderen Kategorien)? – XSL