我将逗号分隔的字符串转换为List。 列表包含空值或无效值时出现问题,如何跳过无效值?
List<int> list = model.Categories.Split(',').Select(int.Parse).ToList();
字符串将为"10,12,3.0,4,1k,5,0.0"
;
答案 0 :(得分: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();
答案 1 :(得分: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();