这是C#中将分隔字符串转换为int数组的最佳方法吗?

给出以下字符串:

string str = "1,2,3"; 

这是将它转换为int数组的最佳扩展吗?

 static class StringExtensions { public static int[] ToIntArray(this string s) { return ToIntArray(s, ','); } public static int[] ToIntArray(this string s, char separator) { string[] ar = s.Split(separator); List ints = new List(); foreach (var item in ar) { int v; if (int.TryParse(item, out v)) ints.Add(v); } return ints.ToArray(); } } 

这真的取决于你想用非整数字符串做什么。 此刻你静静地放下它们。 就个人而言,我希望它出错。 这也让你使用更简洁:

 public static int[] ToIntArray(this string value, char separator) { return Array.ConvertAll(value.Split(separator), s=>int.Parse(s)); } 

这种方法非常简洁,如果split字符串包含任何无法解析为int的值,则会抛出(不是非常有用的) FormatException

 int[] ints = str.Split(',').Select(s => int.Parse(s)).ToArray(); 

如果您只想静默删除任何非int值,可以尝试这样做:

 private static int? AsNullableInt(string s) { int? asNullableInt = null; int asInt; if (int.TryParse(s, out asInt)) { asNullableInt = asInt; } return asNullableInt; } // Example usage... int[] ints = str.Split(',') .Select(s => AsNullableInt(s)) .Where(s => s.HasValue) .Select(s => s.Value) .ToArray(); 

如果列表中的某个元素没有解析为int,这会爆炸,这可能比默默地失败更好:

 public static int[] ToIntArray(this string value, char separator) { return value.Split(separator).Select(i => int.Parse(i)).ToArray(); } 

它看起来没问题,如果其中一个项目无法转换而不是静默失败,我也会抛出exception。