2017-07-21 4 views
1

Ich habe eine kommagetrennte Zeichenfolge in "Liste" konvertiert. Problem während eine Liste einen leeren Wert oder einen ungültigen Wert enthält, wie kann man einen ungültigen Wert überspringen?Konvertieren von kommagetrennten Zeichenfolgen in die Liste "int" und Validieren

List<int> list = model.Categories.Split(',').Select(int.Parse).ToList(); 

Zeichenfolge wird "10,12,3.0,4,1k,5,0.0";

+0

Was ist für Sie ein ungültiger Wert ist? Haben Sie non-int Werte in Ihrer Zeichenkette (die nicht leer sind oder Leerstellen? Zum Beispiel nur irgendeine zufällige Zeichenkette?) –

+0

Ja, es wird keine int Werte enthalten –

Antwort

3

Wenn Sie möchten, bestätigen, dass nur gültige Ints die Select Verwendung erreichen int.TryParse:

int num; 
var result = model.Categories.Split(',') 
        .Where(i => int.TryParse(i, out num)) 
        .Select(int.Parse).ToList(); 

Bei der Verwendung von C 7.0 # dann kann nur sein:

var result = model.Categories.Split(',') 
        .Where(i => int.TryParse(i, out int num)) 
        .Select(int.Parse).ToList(); 

nicht zu haben, parse zweimal können Sie auch so etwas versuchen:

Func<string, int?> ParseOrDefault = (input) => 
    int.TryParse(input, out int num) ? (int?)num : null; 
var result = data.Split(',').Select(ParseOrDefault).Where(i => i != null).ToList(); 

Oder besser:

var result = data.Split(',') 
       .Select(i => int.TryParse(i, out int num) ? (int?)num : null) 
       .Where(i => i != null).ToList(); 
+0

Wenn Sie CS6 verwenden, brauchen Sie nicht einmal Um die int-Variable zu definieren, können Sie einfach 'TryParse (i, out int num)' inline verwenden. – Adwaenyth

+0

@Adwaenyth - guter Kommentar. Wird bearbeiten. Nur um C# 7 zu korrigieren –

+0

Whoops, mein Schlechter. – Adwaenyth

1

Sie können versuchen, mit TryParse statt Parse:

List<int> list = model 
    .Categories 
    .Split(',') 
    .Select(item => { 
     int value; 
     bool parsed = int.TryParse(item, out value); 

     return new { 
     parsed = parsed, 
     value = value; 
     }; 
    }) 
    .Where(item => item.parsed) 
    .Select(item => item.value) 
    .ToList(); 
Verwandte Themen