2012-04-21 13 views
6

Mam ten fragment kodu:ciąg wskazówki do listy wskazówki z 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>(); 

wiem, że mogę użyć połów starają się upewnić się, że konwersja nie wygeneruje błąd, ale zastanawiałem się, w jaki sposób mógłbym to wykonać za pomocą polecenia TryParse w instrukcji linq.

Dzięki.

+2

czego można się spodziewać się zdarzyć, gdy wartość int nie zostanie znaleziony, zastąpić go 0, zignorować, zrzucić błąd? – ilivewithian

Odpowiedz

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

Występuje błąd: 'zmienna zakresu tylko do odczytu nie może być używana jako cel przypisania' – Myster

+0

To nie działa. "Nie można przekazać zmiennej zasięgu jako parametru out lub ref" – Phil

+0

Nie zamierzam mówić, ponieważ może mi brakować czegoś. Jednak: To nie działa. –

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

to zwróci -1 do niepowodzeniem konwersji.

0

Ostrzeżenie: nie próbowano.

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

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

co oznacza, że ​​będzie tylko uzyskać wartość pomyślnie analizowany ...

2

Można to zrobić tak:

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(); 
Powiązane problemy