Convert comma separated string of ints to int array

c#

Solution

You should use a foreach loop, like this:

public static IEnumerable<int> StringToIntList(string str) {
    if (String.IsNullOrEmpty(str))
        yield break;

    foreach(var s in str.Split(',')) {
        int num;
        if (int.TryParse(s, out num))
            yield return num;
    }
}

Note that like your original post, this will ignore numbers that couldn't be parsed.

If you want to throw an exception if a number couldn't be parsed, you can do it much more simply using LINQ:

return (str ?? "").Split(',').Select<string, int>(int.Parse);

Problem

I only found a way to do it the opposite way round: create a comma separated string from an int list or array, but not on how to convert input like `string str = "1,2,3,4,5";` to an array or list of ints. Here is my implementation (inspired by this post by Eric Lippert): ``` public static IEnumerable<int> StringToIntList(string str) { if (String.IsNullOrEmpty(str)) { yield break; } var chunks = str.Split(',').AsEnumerable(); using (var rator = chunks.GetEnumerator()) { while (rator.MoveNext()) { int i = 0; if (Int32.TryParse(rator.Current, out i)) { yield return i; } else { continue; } } } } ``` Do you think this is a good approach or is there a more easy, maybe even built in way? EDIT: Sorry for any confusion, but the method needs to handle invalid input like `"1,2,,,3"` or `"###, 5,"` etc. by skipping it.

Original source

Related problems