使用 LINQ 将字符串转换为 int 数组

我有一个函数(tointarray)可以将一个字符串转换成整型数组,但是我对它不是很满意。它确实起到了作用,但必须有一种更优雅的方式来实现这一点,也许 LINQ可以在这方面提供帮助。不幸的是,我在 LINQ 不是很好。还有更好的办法吗?

我的职责:

{
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;
}
153414 次浏览
s1.Split(';').Select(s => Convert.ToInt32(s)).ToArray();

Untested and off the top of my head...testing now for correct syntax.

Tested and everything looks good.

This post asked a similar question and used LINQ to solve it, maybe it will help you out too.

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

Here's code that filters out invalid fields:

    var ints = from field in s1.Split(';').Where((x) => { int dummy; return Int32.TryParse(x, out dummy); })
select Int32.Parse(field);

Actually correct one to one implementation is:

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

You can shorten JSprangs solution a bit by using a method group instead:

string s1 = "1;2;3;4;5;6;7;8;9;10;11;12";
int[] ints = s1.Split(';').Select(int.Parse).ToArray();
    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;
}

Reference:

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