2010-07-29 13 views

Respuesta

12

cree que va a encontrar su respuesta aquí:

Puzzling Enumerable.Cast InvalidCastException

La última parte, en Editar:

Cast<T>() es un método de extensión en IEnumerable en lugar de IEnumerable<T>. Eso significa que en el momento cada valor llega al punto donde que está siendo fundido, ya ha sido caja de nuevo en un System.Object

+1

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

+5

'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. –

Cuestiones relacionadas