Ich versuche, IList
in List
umzuwandeln, aber ich bekomme jedes Mal einen Fehler.
List<SubProduct> subProducts= Model.subproduct;
Model.subproduct
gibt IList<SubProduct>
zurück.
Versuchen
List<SubProduct> subProducts = new List<SubProduct>(Model.subproduct);
oder
List<SubProduct> subProducts = Model.subproducts as List<SubProduct>;
Wie wäre es damit:
List<SubProduct> subProducts = Model.subproduct.ToList();
In meinem Fall musste ich dies tun, da keine der vorgeschlagenen Lösungen verfügbar war:
List<SubProduct> subProducts = Model.subproduct.Cast<SubProduct>().ToList();
List<SubProduct> subProducts= (List<SubProduct>)Model.subproduct;
Die implizite Konvertierung ist fehlgeschlagen, weil List<>
IList
implementiert, nicht umgekehrt. Sie können also IList<T> foo = new List<T>()
sagen, aber nicht List<T> foo = (some IList-returning method or property)
.
Alle anderen Antworten empfehlen, AddRange mit einer IList zu verwenden.
Eine elegantere Lösung, die das Casting vermeidet, ist die Implementierung einer Erweiterung von IList, um die Arbeit zu erledigen.
In 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
Und in C #:
public void AddRange<T>(this ref IList<T> Exttype, IEnumerable<T> ElementsToAdd)
{
foreach (var ele in ElementsToAdd)
{
Exttype.Add(ele);
}
}
Sie können die Liste mit Hilfe von iterieren:
var item = Model.subproduct[index];
List<ProjectResources> list = new List<ProjectResources>();
IList<ProjectResources> obj = `Your Data Will Be Here`;
list = obj.ToList<ProjectResources>();
Dies würde IList-Objekt in Listenobjekt konvertieren.