I have this string:
string input = "1,2,3,4,s,6";
Pay attention to the s
character.
I just want to convert this string in a List<int>
using LINQ. I initially tried in this way:
var myList = new List<int>();
input.Split(',').ToList().ForEach(n =>
myList.Add(int.TryParse(n, out int num) ? num : -1)
);
lista.RemoveAll(e => e == -1);
But I prefer not have any -1
instead of a no-number characters.
So now I try with this:
var myList = new List<int>();
input.Split(',').ToList()
.FindAll(n => int.TryParse(n, out int _))
.ForEach(num => myList.Add(int.Parse(num)));
I prefer this, but is really a shame that the parsing happening two times (TryParse
at first and then Parse
). But, from what I understand, the out variable in TryParse is useless (or not?).
Have you others suggests (using LINQ)?
I prefer to make a nice helper function:
Then it's a simple matter to parse:
That gives:
If the numbers are always single ASCII digits:
Few slower RegEx alternatives for fun: