Mamkonwersji na typ IEnumerable interfejsu
List<Person> personlist;
Jak mogę przekonwertować do
interfejsuIEnumerable<IPerson> iPersonList
Person Narzędzia IPerson
Mamkonwersji na typ IEnumerable interfejsu
List<Person> personlist;
Jak mogę przekonwertować do
interfejsuIEnumerable<IPerson> iPersonList
Person Narzędzia IPerson
Jeśli jesteś w .NET 4.0 lub nowszej, można po prostu zrobić niejawny Obsada:
IEnumerable<IPerson> iPersonList = personlist;
//or explicit:
var iPersonList = (IEnumerable<IPerson>)personlist;
używa rodzajowy kontrawariancji w IEnumerable<out T>
- czyli od kiedy tylko kiedykolwiek coś się o IEnumerable
, można domyślnie przekonwertować IEnumerable<T>
na IEnumerable<U>
, jeśli T : U
. (Używa się też, że List<T> : IEnumerable<T>
.)
W przeciwnym razie trzeba rzucić każdą pozycję za pomocą LINQ:
var iPersonList = personlist.Cast<IPerson>();
Można użyć IEnumerable.Cast
var iPersonList = personlist.Cast<IPerson>();
@ManishSingh Musisz dodać 'using System.Linq;' – juharr
Od .NET 4.0, można przekazać List<Person>
do metody z parametrem typu IEnumerable<IPerson>
bez niejawny lub wyraźne rzucanie.
niejawny odlewania odbywa się automatycznie (jeśli to możliwe), dzięki contravariance
Można to zrobić:
var people = new List<Person>();
// Add items to the list
ProcessPeople(people); // No casting required, implicit cast is done behind the scenes
private void ProcessPeople(IEnumerable<IPerson> people)
{
// Processing comes here
}
'' Lista jest '' IEnumerable . –
patrickinmpls co ostatecznie próbujesz zrobić ..? czy możesz spróbować wyszukać metodę rozszerzenia "Cast" – MethodMan