6
Gdy próbuje odpowiedzieć this question odkryłem następujące:Casting i LINQ Obsada <T>()
string s = "test";
var result1 = s.Select(c => (ushort)c); // works fine
var result2 = s.Cast<ushort>(); // throws an invalid cast exception
Dlaczego Cast<T>()
nie tutaj? Co za różnica?
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
'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. –