Если вы хотите включить простую проверку и пропустить недопустимые значения (вместо исключения), вот что использует 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
РЕДАКТИРОВАТЬ: Вот обновленный запрос на основе обратной связи от Антуана. Сначала вызывается 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