Wenn das zugrunde liegende Objekt des von repository.GetData
zurückgegebenen Werts nicht mit dem übereinstimmt, zu dem Sie es zu konvertieren versuchen, ist das Ergebnis immer null
. Da die generischen Elementtypen des Verfahrens und was zurückgeben tatsächlich von repository.GetData
unterschiedlich sind, müssen Sie einige Umwandlungen tun, um das gewünschte Ergebnis
bekommen Unter der Annahme, dass MyObject
implementiert IMyObject
kann ich zumindest Möglichkeiten denken mit System.Linq
zu bekommen das Ergebnis, das du suchst.
Option 1: Cast<T>()
Casts die Elemente eines System.Collections.IEnumerable in den angegebenen Typ.
zuerst den Inhalt von temp
mit der Cast<MyObject>()
Linq Erweiterung konvertieren und dann die ToList<T>()
Extension-Methode verwenden, um Sie IList<MyObject>
public IList<MyObject> GetSomeData(string inputParam)
{
//repository.GetData returns IEnumerable<IMyObject>
var temp = repository.GetData(inputParam);
var list = temp.Cast<MyObject>().ToList();
return list;
}
Option 2 zu erhalten resultierende: Die Filter OfType<T>()
Elemente eines System.Collections.IEnumerable basierend auf einem angegebenen Typ.
Filter der Gehalt an temp
mit der OfType<MyObject>()
Linq Erweiterung und verwenden Sie dann die ToList<MyObject>()
Erweiterung Methode, die Sie bekommen resultierende IList<MyObject>
public IList<MyObject> GetSomeData(string inputParam)
{
//repository.GetData returns IEnumerable<IMyObject>
var temp = repository.GetData(inputParam);
var list = temp.OfType<MyObject>().ToList();
return list;
}
'var list = temp.ToList();' –
Weil Ihre 'IEnumerable 'ist keine' Liste'. 'IEnumerable' s kommen in vielen Formen und Größen, und viele von ihnen sind nicht 'List's. Verwenden Sie stattdessen '.ToList()'. –
Verwenden Sie '' '' nicht zum Eingeben von C#. Verwenden Sie '(Liste) temp', es sei denn, Sie möchten, dass' list' 'null' ist, wenn' temp' keine 'list ' ist. –