如果要包括一些简单的验证并跳过无效值(而不是引发异常),则可以使用TryParse:
string csv = "1,2,3,4,a,5";
int mos = 0;
var intList = csv.Split(',')
.Select(m => { int.TryParse(m, out mos); return mos; })
.Where(m => m != 0)
.ToList();
//returns a list with integers: 1, 2, 3, 4, 5
编辑:这是基于Antoine反馈的更新查询。它首先调用TryParse筛选出所有错误值,然后调用Parse进行实际转换。
string csv = "1,2,3,4,a,5,0,3,r,5";
int mos = 0;
var intList = csv.Split(',')
.Where(m => int.TryParse(m, out mos))
.Select(m => int.Parse(m))
.ToList();
//returns a list with integers: 1, 2, 3, 4, 5, 0, 3, 5
编辑2:感谢Charles Burns的反馈,对C#7.0的更新查询。请注意,通过这种方法,我们摆脱了多余的mos变量,因此它有点干净。
string csv = "1,2,3,4,a,5,0,3,r,5";
var intList = csv.Split(',')
.Where(m => int.TryParse(m, out _))
.Select(m => int.Parse(m))
.ToList();