使用LINQ将string转换为int数组

可能重复:
C#:是否有一个LINQ的方式来创build一个给定的数组构造函数参数的对象数组?

我有一个函数(tointarray)将string转换为一个int数组,但我不是很满意。 它完成了这项工作,但必须有一个更优雅的方式来做到这一点,也许LINQ可以在这里帮助。 不幸的是我在LINQ中不是很好。 有没有更好的办法?

我的function:

{ string s1 = "1;2;3;4;5;6;7;8;9;10;11;12"; int[] ia = tointarray(s1, ';'); } int[] tointarray(string value, char sep) { string[] sa = value.Split(sep); int[] ia = new int[sa.Length]; for (int i = 0; i < ia.Length; ++i) { int j; string s = sa[i]; if (int.TryParse(s, out j)) { ia[i] = j; } } return ia; } 

这篇文章提出了一个类似的问题,并使用LINQ解决它,也许它也会帮助你。

 string s1 = "1;2;3;4;5;6;7;8;9;10;11;12"; int[] ia = s1.Split(';').Select(n => Convert.ToInt32(n)).ToArray(); 

您可以通过使用方法组来缩短JSprangs解决scheme:

 string s1 = "1;2;3;4;5;6;7;8;9;10;11;12"; int[] ints = s1.Split(';').Select(int.Parse).ToArray(); 
 s1.Split(';').Select(s => Convert.ToInt32(s)).ToArray(); 

未经testing,脱离我的头顶…现在testing正确的语法。

经过testing,一切看起来不错。

其实正确的一对一的实现是:

 int n; int[] ia = s1.Split(';').Select(s => int.TryParse(s, out n) ? n : 0).ToArray(); 

这是过滤出无效字段的代码:

  var ints = from field in s1.Split(';').Where((x) => { int dummy; return Int32.TryParse(x, out dummy); }) select Int32.Parse(field); 
  public static int[] ConvertArray(string[] arrayToConvert) { int[] resultingArray = new int[arrayToConvert.Length]; int itemValue; resultingArray = Array.ConvertAll<string, int> ( arrayToConvert, delegate(string intParameter) { int.TryParse(intParameter, out itemValue); return itemValue; } ); return resultingArray; } 

参考:

http://codepolice.net/convert-string-array-to-int-array-and-vice-versa-in-c/