Этот вопрос уже имеет ответ здесь:
У меня есть функция (tointarray) для преобразования строки в массив ints, но я не очень удовлетворен им. Это делает задание, но должен быть более изящный способ сделать это, и возможно 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;
}
В этом посте задавался похожий вопрос и для его решения использовался 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();
Вот код, который отфильтровывает недопустимые поля:
var ints = from field in s1.Split(';').Where((x) => { int dummy; return Int32.TryParse(x, out dummy); })
select Int32.Parse(field);
s1.Split(';').Select(s => Convert.ToInt32(s)).ToArray();
Непроверено, и в голову не пришло ... тестирование правильного синтаксиса.
Протестировано, все в порядке.
На самом деле правильная индивидуальная реализация:
int n;
int[] ia = s1.Split(';').Select(s => int.TryParse(s, out n) ? n : 0).ToArray();