6
Al intentar responder this question, he descubierto lo siguiente:Fundición y LINQ moldeada <T>()
string s = "test";
var result1 = s.Select(c => (ushort)c); // works fine
var result2 = s.Cast<ushort>(); // throws an invalid cast exception
¿Por qué fracasan Cast<T>()
aquí? ¿Cual es la diferencia?
Gracias Martin. Eso es interesante. Por lo tanto, Cast probablemente debería evitarse de todos modos por la penalización inherente al rendimiento del boxeo. Me sorprende que MSDN no lo mencione en ningún lado (que pudiera encontrar, de todos modos). –
fearofawhackplanet
'Cast' solo está destinado a ser utilizado para llevar un 'IEnumerable' al nivel de un' IEnumerable ', donde se definen todos los demás operadores LINQ. Tomando un 'IEnumerable ' y convirtiéndolo en un 'IEnumerable ' es una proyección, que se hace mediante 'Select'. El hecho de que 'Cast 'sea posible en un' IEnumerable 'es simplemente porque' IEnumerable 'hereda de' IEnumerable' - no por otro motivo. –