我只找到了一种与之相反的方法:从一个int列表或数组创建一个用逗号分隔的字符串,但是没有关于如何将输入转换string str = "1,2,3,4,5";为一个数组或int列表的方法。
string str = "1,2,3,4,5";
这是我的实现(受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,"通过跳过它等等。
"1,2,,,3"
"###, 5,"
您应该使用一个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);