2015-07-08 13 views
5

Perché il seguente codice genera un errore?Perché Select (x => ... Cast <x.GetType()>()) non funziona?

var listOfList = new List<List<string>>(); 
var tmp = listOfList.Select(x => x.OrderBy(y => y).Cast<x.GetType()>()); 

Errore:

Operator '<' cannot be applied to operands of type 'method group' and 'System.Type'

Il codice sembra sciocco, perché è estremamente semplificato dal mio esempio reale. Mi chiedo solo perché non funziona esattamente. Funziona se sostituisco x.getType() con List<string>, ma non ora il tipo di x in fase di esecuzione.
Per chiarimenti: non è necessario cercare una soluzione. Voglio sapere cosa c'è di sbagliato nel mio codice.

+7

'Cast ' richiede che il tipo sia noto al momento della compilazione. – Ric

+0

Perché stai trasmettendo 'x' a' x'? Qual è il punto di questo? –

+1

Qual è l'uso del casting per un tipo che non conosci? –

risposta

5

Il modo corretto di scrivere il codice è quello di utilizzare ToList invece di Cast come accennato altrove.

Tuttavia, per rispondere alla domanda "cosa c'è di sbagliato nel mio codice?" ci sono due punti specifici per cominciare:

  • Utilizzando Cast<x.GetType()>():

Generics sono usati con le variabili di tipo fase di compilazione, in modo da mettere Cast<List<string>>() avrebbe più senso qui - il x.GetType() sarà risolto solo in fase di esecuzione tempo. Immagino che il messaggio che stai ricevendo sia il risultato del fatto che il compilatore si sia confuso su questo punto.

  • Il tentativo di gettare a List<string>:

Anche se la sintassi del codice getto specifico era ragionevole, il cast attuale sarebbe ancora fallire. A questo punto stai provando a trasmettere un OrderedEnumerable<string> a List<string>. Questo non è un cast valido. Lo ToList() risolve l'ordine orderby altrimenti non risolto in un elenco.

2

Perché è necessario farlo? Credo che hai bisogno di questo codice

var listOfList = new List<List<string>>(); 
var tmp = listOfList.Select(x => x.OrderBy(y => y).ToList()); 
+0

Ho votato, ma in realtà non ho risposto alla domanda: "Perché Select (x => ... Cast ()) non funziona?" – Enigmativity

+0

Come già detto, il mio esempio di codice reale sembra molto diverso. La risposta corretta era già stata fornita nei commenti: "Cast " richiede che il tipo sia noto al momento della compilazione. –

+0

Questo codice nel mio VS è stato compilato come fallimento, non c'è modo di lavorare! –

Problemi correlati