Metoda
Cast<T>() służy do konwersji obiektu typu
IEnumerable<A> na
IEnumerable<T>. Przykład zastosowania:
int[] x11 = new int[] { 1, 2, 3, 4, 4, 3 };
object[] x21 = x11.Cast<object>().ToArray();
int[] x31 = x21.Cast<int>().ToArray();
Cast<T>() zwraca jako wynik obiekt typu
IEnumerable<T>, stąd w powyższym przykładzie potrzebne jest jeszcze wywołanie
ToArray(). Ale takie coś nie zadziała:
int[] x11 = new int[] { 1, 2, 3, 4, 4, 3 };
uint[] x21 = x11.Cast<uint>().ToArray();
int[] x31 = x21.Cast<int>().ToArray();
Problem polega na tym, że
Cast<T>() wykonuje konwersje tylko jeśli wszystkie obiekty kolekcji źródłowej są także obiektami typu
T. Jeśli warunek nie jest spełniony dostaniemy wyjątek. Nie nastąpi to w samej metodzie
Cast<T>(), dopiero próba enumeracji po zwróconym enumeratorze zakończy się wyjątkiem (efekt
opóźnionego wykonywania kodu).
Cast<T>() nie uwzględnia także bezpośrednich operatorów konwersji.
Brak komentarzy:
Prześlij komentarz