2012-03-05 2 views
2

Я прочитал список номеров из текстового документа и сохранил их в List<String>, и я пытаюсь преобразовать их в List<int>. Числа разделяются пробелами. Вот то, что я пытался, предполагая, что номера список Строки:Преобразование списка <String> в список <int>

List<int> AllNumbers = Numbers.ConvertAll<int>(Convert.ToInt32); 

Когда я пытаюсь использовать это говорит: «Входная строка не была в правильном формате.»

Что такое правильный способ преобразования List<String> в List<int>?

SAMPLE:

  string numbers = File.ReadAllText("numbers.txt"); 
      string[] allNumbers = numbers.Split(new char[] { ' ', '\t', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); 
      List<string> List = new List<string>(); 
      List.AddRange(allNumbers); 

Затем я хочу взять список allNumbers и преобразовать его в список целых чисел.

Текстовый файл выглядит следующим образом:

10 12 01 03 22 .... ЭСТ

+0

Так у вас есть списки строк, где каждая строка состоит из разделенных пробелами чисел? –

ответ

4

Похоже, ваши номера в одной строки, разделенные пробелами, если так что вы можете использовать Linq :

List<int> allNumbers = numbers.Split(' ').Select(int.Parse).ToList(); 

Если у вас действительно есть List<string> номера уже просто:

List<int> allNumbers = numbers.Select(int.Parse).ToList(); 

Или, наконец, если каждая строка может содержать несколько чисел, разделенных пробелами:

List<int> allNumbers = numbers.SelectMany(x=> x.Split(' ')).Select(int.Parse).ToList(); 
+0

Все они находятся в одной длинной строке, разделенной пробелами. Спасибо, сегодня я попробую эти методы. –

+0

Независимо от того, какой метод я использую, я все равно получаю строку не в правильном формате. Любые идеи, почему это было бы? –

+0

Опубликовать образец ввода и ожидаемый результат, если не сказать иначе – BrokenGlass

1

Если предположить, что каждая строка в списке содержит один или несколько целых чисел, разделенных пробелами, вы можете попробовать этот подход:

var res = listOfNumbers 
    .SelectMany(numStr => numStr.Split(' ').Select(s => int.Parse(s))) 
    .ToList(); 

вы можете использовать метод группу вместо лямбда в последней выберите: Select(int.Parse)