我已将逗号分隔的字符串转换为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值 –