Разделить строку, преобразовать ToList <int>() в одну строку

У меня есть строка с номерами

string sNumbers = "1,2,3,4,5";

Я могу разбить его, а затем преобразовать в List<int>

sNumbers.Split( new[] { ',' } ).ToList<int>();

Как преобразовать строковый массив в целочисленный список? Так что я смогу преобразовать string[] в IEnumerable

Ответ 1

var numbers = sNumbers.Split(',').Select(Int32.Parse).ToList();

Ответ 2

Вы также можете сделать это без необходимости Linq:

List<int> numbers = new List<int>( Array.ConvertAll(sNumbers.Split(','), int.Parse) );

// Uses Linq
var numbers = Array.ConvertAll(sNumbers.Split(','), int.Parse).ToList();

Ответ 3

Для метода Joze также требуется LINQ, ToList() находится в пространстве имен System.Linq.

Вы можете преобразовать массив в список без Linq, передав массив конструктору списка:

List<int> numbers = new List<int>( Array.ConvertAll(sNumbers.Split(','), int.Parse) );

Ответ 4

В Unity3d, int.Parse работает неправильно. Поэтому я использую как ниже.

List<int> intList = new List<int>( Array.ConvertAll(sNumbers.Split(','),
 new Converter<string, int>((s)=>{return Convert.ToInt32(s);}) ) );

Надеемся на эту помощь для пользователей Unity3d.

Ответ 5

также вы можете использовать этот метод расширения

public static List<int> SplitToIntList(this string list, char separator = ',')
{
    return list.Split(separator).Select(Int32.Parse).ToList();
}

использование:

var numberListString = "1, 2, 3, 4";
List<int> numberList = numberListString.SplitToIntList(',');

Ответ 6

Также возможно, чтобы int array задал прямое значение назначения.

как это

int[] numbers = sNumbers.Split(',').Select(Int32.Parse).ToArray();

Ответ 7

Моя проблема была похожа, но с неудобством, что иногда строка содержит буквы (иногда пустые).

string sNumbers = "1,2,hh,3,4,x,5";

Пытается следовать методу расширения кода Pcode Xonos:

public static List<int> SplitToIntList(this string list, char separator = ',')
{
      int result = 0;
      return (from s in list.Split(',')
              let isint = int.TryParse(s, out result)
              let val = result
              where isint
              select val).ToList(); 
}

Ответ 8

Вы можете использовать новые возможности языка С# 6.0:

  • заменить делегат (s) => { return Convert.ToInt32(s); } на соответствующая группа методов Convert.ToInt32
  • заменить вызов избыточного конструктора: new Converter<string, int>(Convert.ToInt32) с помощью: Convert.ToInt32

Результат будет:

var intList = new List<int>(Array.ConvertAll(sNumbers.Split(','), Convert.ToInt32));

Ответ 9

Вы можете использовать это:

List<Int32> sNumberslst = sNumbers.Split(',').ConvertIntoIntList();