2012-04-21 15 views
6

ho questo pezzo di codice:serie di interi nella lista int con un TryParse

TheString = "443,432,546,4547,4445,2,132"; //actually, about 1000 entries  
List<int> TheListOfIDs = new List<int>(); 
TheListOfLeadIDs = from string s in TheString.Split(',') 
        select Convert.ToInt32(s)).ToList<int>(); 

So che posso utilizzare un tentativo di cattura per assicurarsi che la conversione non genera un errore, ma mi chiedevo come potrei farlo funzionare con TryParse nell'istruzione linq.

Grazie.

+2

Cosa vi aspettate che accada quando viene trovato un valore non int, sostituirlo con 0, ignorarlo, lanciare un errore? – ilivewithian

risposta

7
TheListOfLeadIDs = (from string s in TheString.Split(',') 
        let value = 0 
        where int.TryParse(s, out value) 
        select value).ToList<int>(); 
+0

Ho ricevuto errore: 'la variabile intervallo readonly non può essere utilizzata come target di assegnamento' – Myster

+0

Questo non funziona. 'Non posso passare la variabile di intervallo come parametro out o ref' – Phil

+0

Non avrò downvote, dato che potrei mancare qualcosa. Tuttavia: questo NON funziona. –

6
TheListOfIDs = TheString.Split(',') 
         .Select(s => 
         { 
          int i; 
          return Int32.TryParse(s, out i) ? i : -1; 
         }).ToList(); 

Ciò restituirà un -1 per qualsiasi fallito la conversione.

0

Attenzione: non provato.

string[] myString = TheString.Split(','); 

int leadId; 
var theListOfLeadIds = (from myString in myString where int.TryParse(myString, out leadId) select int.Parse(myString)).ToList<int>(); 

Il che significa che si ottiene un valore analizzato con successo solo ...

2

Si potrebbe fare così:

string TheString = "443,432,546,4547,4445,2,132"; //actually, about 1000 entries 
int temp=0; 
var TheListOfIDs= TheString 
        .Split(',') 
        .Where (ts =>int.TryParse(ts,out temp)) 
        .Select (ts =>temp) 
        .ToList(); 
Problemi correlati