我已將逗號分隔的字符串轉換爲List。 列表包含空值或無效值時出現問題,如何跳過無效值?將逗號分隔的字符串轉換爲int列表並驗證
List<int> list = model.Categories.Split(',').Select(int.Parse).ToList();
string將是"10,12,3.0,4,1k,5,0.0"
;
我已將逗號分隔的字符串轉換爲List。 列表包含空值或無效值時出現問題,如何跳過無效值?將逗號分隔的字符串轉換爲int列表並驗證
List<int> list = model.Categories.Split(',').Select(int.Parse).ToList();
string將是"10,12,3.0,4,1k,5,0.0"
;
如果你想驗證只有有效的整數將達到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();
您可以嘗試使用的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();
什麼是你的一個無效值?你的字符串中是否有非int值(不是空白或空格?例如只是一些隨機字符串?) –
是的,它將包含非int值 –