2010-03-02 20 views

Respuesta

11

Yup, Cast no hace eso. Básicamente solo hace conversiones de referencia y conversiones de unboxing, no conversiones entre diferentes tipos de valores.

Use este lugar:

(new[]{1,2,3}).Select(x => (decimal)x) 

Tenga en cuenta que pre-.NET 3.5 SP1, Cast hicieron algunas conversiones más que lo hace ahora. No sé de improviso si habría funcionado o no, pero definitivamente ahora no.

+1

Usted es demasiado rápido. :) –

+0

Para obtener algunas ideas sobre por qué las conversiones de unboxing de boxed int a unboxed decimal no funcionan, consulte http://blogs.msdn.com/ericlippert/archive/2009/03/19/representation-and-identity.aspx para obtener más información. . –

+0

@Eric: Sigo olvidando que 'Cast' está en' IEnumerable' (y por lo tanto objetos) en lugar de 'IEnumerable ' - de ahí que sea una conversión de unboxing en lugar de una conversión entre dos tipos de valores. (No es que un reparto directo funcione en ese caso). Eso sí, no puedo * encontrar * la publicación en la que me expliques sobre lo que solía hacer Cast (antes de SP1). –

3

Cast no es convertir.

Cuando usa el método de extensión Cast, intenta lanzar un elemento según el esquema de herencia. Como int no se deriva de decimal, esto no se puede hacer usando Cast. Pruebe lo siguiente en su lugar:

(new[] {1,2,3}).Select(x => (decimal)X); 
Cuestiones relacionadas