2017-01-22 3 views
2

Ниже приведена моя строка.Как преобразовать строку в коллекцию Int

var str = "1,2,3,4,5"; 

var strArr = str.split(","); // this gives me an array of type string 

List<int> intCol = new List<int>(); //I want integer collection. Like 

Что я делаю: -

foreach(var v in strArr) 
{ 
    intCol.add(Convert.ToInt(v)); 
} 

Является ли это правильный способ сделать это?

+0

@sakbari: Этот дубликат не очень близко, речь идет не о ',' отделенном списке. –

ответ

3
var numbers = str.Split(',').Select(x => int.Parse(x)).ToList(); 

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

var strArr = str.Split(',') 
    .Select(x => 
    { 
     int num; 
     if (int.TryParse(x, out num)) 
     { 
      return num; 
     } 

     // Parse failed so return -1 or some other value or log it 
     // or throw exception but then this whole operation will fail 
     // so it is upto you and your needs to decide what to do in such 
     // a case. 
     return -1; 
    }); 

Примечание: Convert.ToInt() выдает FormatException, если значение не может быть преобразовано. TryParse не будет.

+0

Получил ваш момент. Дело в том, что вы используете FluentApi, но косвенно вы делаете то же, что и я, используя цикл foreach. Правильно?? –

+0

Я использую Linq. – CodingYoshi

4

Хорошо, это a Способ сделать это, конечно же - но LINQ делает его намного проще, так как это именно то, для чего он предназначен. Вы хотите, чтобы трубопровод, который:

  • расколы исходную строку на подстроки
  • преобразует каждую строку в целое число
  • преобразует полученную последовательность в список

Это просто:

List<int> integers = bigString.Split(',').Select(int.Parse).ToList(); 

Использование int.Parse в качестве группы методов здесь чистое, но если вы mor е удобно с помощью лямбда-выражения, вы можете использовать

List<int> integers = bigString.Split(',').Select(s => int.Parse(s)).ToList();