2012-04-21 10 views
6

Ich habe dieses Stück Code:Reihe von Ints von Ints zur Liste mit 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>(); 

Ich weiß, dass ich einen Versuch fangen, um sicherzustellen, kann die Umwandlung keinen Fehler werfen, aber ich habe mich gefragt, wie ich das mit einem TryParse in der linq-Anweisung machen könnte.

Danke.

+2

Was tun Sie passieren erwarten, wenn ein nicht int-Wert gefunden wird, Ersetze es mit 0, ignoriere es, wirf einen Fehler? – ilivewithian

Antwort

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

Ich erhalte den Fehler: 'readonly range variable kann nicht als Zuweisungsziel verwendet werden. – Myster

+0

Das funktioniert nicht. 'Die Bereichsvariable kann nicht als Out- oder Ref-Parameter übergeben werden' – Phil

+0

Ich werde nicht downvote, da ich etwas verpassen könnte. Allerdings: Das funktioniert NICHT. –

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

Dies wird ein -1 für jede ausfallen Umwandlung zurück.

0

Warnung: nicht ausprobiert.

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

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

Was bedeutet, dass Sie nur Wert erfolgreich analysiert werden get ...

2

Sie es so tun könnte:

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();