2010-03-03 1 views
7

Есть ли способ преобразовать массивы строк в массивы int так же просто, как разбор строки на int в C#.C# string [] to int []

int a = int.Parse(”123”); 
int[] a = int.Parse(”123,456”.Split(’,’)); // this don't work. 

Я попытался использовать методы расширения для класса int, чтобы добавить эту функцию самостоятельно, но они не становятся статическими.

Любая идея о том, как это сделать быстро и приятно?

+1

LINQ должно позволить вам сделать это в одна строка. Или лямбда-выражения. –

+2

Вы пытались выполнить поиск на этом сайте, прежде чем спросить? –

ответ

17

Этот запрос LINQ должен это сделать:

strArray.Select(s => int.Parse(s)).ToArray() 
8
int[] a = Array.ConvertAll("123,456".Split(','), s => Int32.Parse(s)); 

Если делать только штрафом. Вы можете изменить лямбда, чтобы использовать TryParse, если вы не хотите исключений.

+1

'Array.ConvertAll' определенно требует меньше перераспределений, чем LINQy' ToArray() '. Обратите внимание, что в этом случае вам даже не нужна лямбда, вы можете передать 'Int32.Parse' как второй параметр' ConvertAll'. –

3
”123,456”.Split(’,’).Select(s => int.Parse(s)).ToArray(); 
6
int[] a = "123,456".Split(’,’).Select(s => int.Parse(s)).ToArray(); 
3

Используйте это:

"123,456".Split(',').Select(s => int.Parse(s)).ToArray() 
3

Я думаю, как это:

string[] sArr = { "1", "2", "3", "4" }; 
int[] res = sArr.Select(s => int.Parse(s)).ToArray(); 
2

Вот метод расширения. Это делается в строке, потому что вы не можете добавить статическую функцию в строку.

public static int[] ToIntArray(this string value) 
{ 
    return value.Split(',') 
     .Select<string, int>(s => int.Parse(s)) 
     .ToArray<int>(); 
} 

Вот как вы используете его

string testValue = "123, 456,789"; 

int[] testArray = testValue.ToIntArray(); 

Это предполагает, что вы хотите разделить на «» если нет, то вы должны изменить ToIntArray

+2

Очень классно, только то, что я искал. Благодаря! –