一尘不染

将逗号分隔的整数字符串转换为整数数组

c#

我只找到了一种与之相反的方法:从一个int列表或数组创建一个用逗号分隔的字符串,但是没有关于如何将输入转换string str = "1,2,3,4,5";为一个数组或int列表的方法。

这是我的实现(受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;
                }
            }
        }
    }

您认为这是一个好方法还是有更简单的方法,甚至可以通过某种方式构建?

编辑: 对不起任何混乱,但该方法需要处理等无效的输入"1,2,,,3""###, 5,"通过跳过它等等。


阅读 787

收藏
2020-05-19

共1个答案

一尘不染

您应该使用一个foreach循环,如下所示:

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;
    }
}

请注意,就像您的原始帖子一样,它将忽略无法解析的数字。

如果您想在无法解析数字的情况下引发异常,则可以使用LINQ轻松得多:

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