2009-07-17

LINQ - metoda Cast()

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