web-dev-qa-db-fra.com

Cast IList to List

J'essaie de transtyper le type IList en List mais je reçois une erreur à chaque fois.

List<SubProduct> subProducts= Model.subproduct;

Model.subproduct renvoie IList<SubProduct>.

53
Pankaj

Essayer

List<SubProduct> subProducts = new List<SubProduct>(Model.subproduct);

ou 

List<SubProduct> subProducts = Model.subproducts as List<SubProduct>;
107
Pbirkoff

Que dis-tu de ça:

List<SubProduct> subProducts = Model.subproduct.ToList();
31
Mark Seemann

Dans mon cas, je devais le faire, car aucune des solutions suggérées n’était disponible:

List<SubProduct> subProducts = Model.subproduct.Cast<SubProduct>().ToList();
8
bluish
List<SubProduct> subProducts= (List<SubProduct>)Model.subproduct;

La conversion implicite a échoué car List<> implémente IList et non l'inverse. Donc, vous pouvez dire IList<T> foo = new List<T>(), mais pas List<T> foo = (some IList-returning method or property).

3
Webleeuw

Les autres réponses recommandent toutes d’utiliser AddRange avec un IList.

Une solution plus élégante qui évite le casting consiste à implémenter une extension à IList pour effectuer le travail.

En VB.NET:

<Extension()>
Public Sub AddRange(Of T)(ByRef Exttype As IList(Of T), ElementsToAdd As IEnumerable(Of T))
   For Each ele In ElementsToAdd
      Exttype.Add(ele)
   Next
End Sub

Et en C #:

public void AddRange<T>(this ref IList<T> Exttype, IEnumerable<T> ElementsToAdd)
{
    foreach (var ele in ElementsToAdd)
    {
        Exttype.Add(ele);
    }
}
0
user11331434

Vous pouvez parcourir la liste en utilisant:

var item = Model.subproduct[index];
0
Versatile
List<ProjectResources> list = new List<ProjectResources>();        
IList<ProjectResources> obj = `Your Data Will Be Here`;
list = obj.ToList<ProjectResources>();

Ceci convertirait un objet IList en un objet List.

0
Hudhaifa Yoosuf