2010-03-02 8 views

risposta

11

Sì, Cast non lo fa. Fondamentalmente fa riferimento alle conversioni e alle conversioni non in scatola, non alle conversioni tra diversi tipi di valore.

Utilizzare questo invece:

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

Nota che pre-.NET 3.5 SP1, Cast fatto alcuni più conversioni di quanto non faccia ora. Non so se sarebbe stato utile o meno, ma sicuramente non ora.

+1

Sei troppo veloce. :) –

+0

Per alcune considerazioni sul perché le conversioni di unboxing da int in scatola a decimali non in casella non funzionano, consultare http://blogs.msdn.com/ericlippert/archive/2009/03/19/representation-and-identity.aspx per i dettagli . –

+0

@Eric: Continuo a dimenticare che 'Cast' è su' IEnumerable' (e quindi oggetti) piuttosto che 'IEnumerable ' - quindi perché si tratta di una conversione di unboxing piuttosto che una conversione tra due tipi di valore. (Non che un cast dritto funzionerebbe in quel caso). Intendiamoci, non posso * mai * trovare il post in cui spieghi cosa era solito fare 'Cast' (prima di SP1). –

3

Cast non convertito.

Quando si utilizza il metodo di estensione Cast, si sta provando a trasmettere un elemento in base allo schema di ereditarietà. Dal momento che int non deriva dal decimale, questo non può essere fatto usando Cast. Prova invece:

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