2010-07-29 25 views

Odpowiedz

12

że znajdziesz swoją odpowiedź tutaj:

Puzzling Enumerable.Cast InvalidCastException

Ostatnia część, pod EDIT:

Cast<T>() jest metoda rozszerzenie na IEnumerable zamiast IEnumerable<T>. To oznacza, że ​​do czasu każda wartość staje się punktem gdzie to jest obsada, to już został pudełkowej powrotem do System.Object

+1

Dzięki Martin. To interesujące. Dlatego też należy prawdopodobnie unikać Cast za nieodłączną karę za boks. Jestem zaskoczony, że MSDN nie wspomina o tym w żadnym miejscu (co i tak mogłem znaleźć). – fearofawhackplanet

+5

'Oddanie ' jest przeznaczone wyłącznie do użycia 'IEnumerable' do poziomu' IEnumerable ', gdzie są zdefiniowane wszystkie inne operatory LINQ. Robienie "IEnumerable " i konwertowanie go na "IEnumerable " jest projekcją, którą wykonuje się za pomocą 'Select'. Fakt, że 'Cast' jest nawet możliwy na' IEnumerable 'jest tylko dlatego, że' IEnumerable 'dziedziczy z' IEnumerable' - nie ma innego powodu. –