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>
.
Essayer
List<SubProduct> subProducts = new List<SubProduct>(Model.subproduct);
ou
List<SubProduct> subProducts = Model.subproducts as List<SubProduct>;
Que dis-tu de ça:
List<SubProduct> subProducts = Model.subproduct.ToList();
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();
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)
.
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);
}
}
Vous pouvez parcourir la liste en utilisant:
var item = Model.subproduct[index];
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.