Zastanawiam się, czy możliwe jest rzutowanie IEnumerable na listę. Czy jest jakiś sposób na to, poza skopiowaniem każdego przedmiotu na listę?Casting IEnumerable <T> do listy <T>
Odpowiedz
Jak już zasugerowano, należy użyć yourEnumerable.ToList()
. Wylicza on poprzez swój IEnumerable
, przechowując zawartość w nowym List
. Niekoniecznie kopiujesz istniejącą listę, ponieważ Twój IEnumerable
może leniwie generować elementy.
Jest to dokładnie to, co sugerują inne odpowiedzi, ale wyraźniejsze. Oto demontaż więc możesz być pewien:
public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source)
{
if (source == null)
{
throw Error.ArgumentNull("source");
}
return new List<TSource>(source);
}
Użyj metody .ToList().
yourEnumerable.ToList();
Jeśli nie są dostępne przy użyciu System.Linq brakuje :). To powinno być całkowicie akceptowaną odpowiedzią ... – CodingYourLife
nie, należy skopiować, jeśli jesteś pewien, że odwołanie jest odniesienie do wykazu, można konwertować jak ten
List<int> intsList = enumIntList as List<int>;
Jeśli jesteś * pewien *, że jest to odnośnik do listy, powinieneś użyć bezpośredniego rzutowania, aby rzucił wyjątek, jeśli się mylisz. Użyj "as", jeśli uważasz, że * może * być listą
Może dodać 'if (intsList == null) intsList = new List
utworzyć nową listę i przekazać stary IEnumerable do jej inicjatora:
IEnumerable<int> enumerable = GetIEnumerable<T>();
List<int> list = new List<int>(enumerable);
to także kopia listy. –
będzie i tak potrzebna kopia. – Shimmy
Jak inni sugerują, wystarczy użyć metody ToList()
na przeliczalnego obiektu:
var myList = myEnumerable.ToList()
Ale jeśli obiekt IEnumerable
nie ma sposobu ToList()
a ty się błąd jak poniżej:
„IEnumerable” nie zawiera definicji „ToList”
pewnie brakuje nazw System.Linq
, więc wystarczy dodać go:
using System.Linq
- 1. IEnumerable <IEnumerable <T>> do IEnumerable <T> użyciu LINQ
- 2. Casting zadanie <T> do zadania <DerivedT>
- 3. Lista <int> do IEnumerable <IComparable>
- 4. Spłaszczyć IEnumerable <IEnumerable <>>; zrozumienia rodzajowych
- 5. IEnumerable <> to IList <>
- 6. Nie można przekonwertować listy <KeyValuePair <...,...>> na IEnumerable <object>?
- 7. C# Nie można przekonwertować z IEnumerable <Base> do IEnumerable <Derived>
- 8. Obsada otrzymała obiekt do listy <object> lub IEnumerable <object>
- 9. Dlaczego nie mogę rzucić listy IEnumerable <T> do BindingList <t>?
- 10. C# LINQ - nie można niejawnie przekonwertować IEnumerable <string> do listy <string>
- 11. export IEnumerable <T> do Excela
- 12. XML do IEnumerable <T>
- 13. Konwersja tablicy do IEnumerable <T>
- 14. Dlaczego IEnumerable <T> jest zdefiniowany jako IEnumerable <out T>, nie IEnumerable <T>
- 15. Jak sprawdzić, czy `IEnumerable <T1>` covariant do `IEnumerable <T2>`?
- 16. Przesyłanie z IEnumerable <Object> do IEnumerable <string>
- 17. Wdrożenie IEnumerable <T> dla listy Wrapper
- 18. Casting i LINQ Obsada <T>()
- 19. Dlaczego funkcja, która trwa IEnumerable <interface>, nie przyjmuje IEnumerable <class>?
- 20. Jak przekonwertować IEnumerable <Task<T>> do IObservable <T>
- 21. Konwertuj IEnumerable <Task<T>> do IObservable <T>
- 22. Czy IEnumerable <T> .Last() zoptymalizowano dla listy <T>?
- 23. IEnumerable <T> w OCaml
- 24. IEnumerable <T> vs IReadOnlyList <T>
- 25. IEnumerable <T> i IQueryable <T> wyjaśnienie?
- 26. Jak zrobić IEnumerable <T> readonly?
- 27. Kopiowanie Lista <BaseClass> do listy <DerivedClass>
- 28. Convert Lista <Enum> do listy <string>
- 29. konwertować EnumerableRowCollection <string> do listy <string>
- 30. Zdefiniuj metodę rozszerzenia dla IEnumerable <T>, która zwraca IEnumerable <T>?
spowoduje błąd, jeśli IEnumerable nie jest puste, ale puste? –