2017-07-21 41 views
1

我已將逗號分隔的字符串轉換爲List。 列表包含空值或無效值時出現問題,如何跳過無效值?將逗號分隔的字符串轉換爲int列表並驗證

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

string將是"10,12,3.0,4,1k,5,0.0";

+0

什麼是你的一個無效值?你的字符串中是否有非int值(不是空白或空格?例如只是一些隨機字符串?) –

+0

是的,它將包含非int值 –

回答

3

如果你想驗證只有有效的整數將達到Select使用int.TryParse

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

如果使用C#7.0則可以只是:

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

爲了不必解析兩次,你可以嘗試這樣的事情:

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

或者更好:

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

如果您使用CS6,則甚至不需要定義int變量,你可以使用'的TryParse(我,OUT INT NUM)'在線。 – Adwaenyth

+0

@Adwaenyth - 好評。將編輯。只是爲了糾正C#7 –

+0

哎呦,我的不好。 – Adwaenyth

1

您可以嘗試使用的TryParse代替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(); 
相關問題