Как преобразовать строку, разделенную запятой, в список <int>

string tags = "9,3,12,43,2"

List<int> TagIds = tags.Split(',');

Это не работает, потому что метод split возвращает строку []

Пожалуйста, помогите.

Ответ 1

Вот один из способов сделать это:

List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();

Ответ 2

Если вы хотите включить простую проверку и пропустить недопустимые значения (вместо того, чтобы выдавать исключение), вот что-то, использующее TryParse:

string csv = "1,2,3,4,a,5";
int mos = 0;
var intList = csv.Split(',')
                    .Select(m => { int.TryParse(m, out mos); return mos; })
                    .Where(m => m != 0)
                    .ToList();

//returns a list with integers: 1, 2, 3, 4, 5

РЕДАКТИРОВАТЬ: Вот обновленный запрос на основе обратной связи от Антуана. Сначала вызывается TryParse, чтобы отфильтровать все неверные значения, а затем Parse, чтобы выполнить фактическое преобразование.

string csv = "1,2,3,4,a,5,0,3,r,5";
int mos = 0;
var intList = csv.Split(',')
                    .Where(m => int.TryParse(m, out mos))
                    .Select(m => int.Parse(m))
                    .ToList();

//returns a list with integers: 1, 2, 3, 4, 5, 0, 3, 5

Ответ 3

Вы можете использовать LINQ w/ int.Parse() для преобразования string[] в IEnumerable<int>, а затем передать этот результат конструктору List<T>:

var tagIds = new List<int>(tags.Split(',').Select(s => int.Parse(s)));

Ответ 4

Небольшая LINQ проходит долгий путь:

 List<int> TagIds = tags.Split(',')
         .Select(t => int.Parse(t))
         .ToList();

Ответ 5

Без запроса LINQ вы можете выбрать этот метод,

string tags = "9,3,12,43,2";
List<string> numbers = nos.Split(',').ToList<string>();

а затем вы можете преобразовать этот список в целочисленный тип...

Ответ 6

string tags = "9,3,12,43,2"

List<int> TagIds = tags.Split(',').Select(x => x.Trim()).Select(x=> Int32.Parse(x)).ToList();

Ответ 7

Если вы используете С# 3.5, вы можете использовать Linq для достижения этого

string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(s=>int.Parse(s)).ToList();

или короткий

string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(int.Parse).ToList();

Ответ 8

string tags = "9,3,12,43,2";
List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();

Ответ 9

Я сделал модификацию ответа khalid13. Если пользователь поставил строку "0", его ответ удалит это из результирующего списка. Я сделал что-то подобное, но использовал анонимный объект.

var result = commaSeparatedString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
            .Select(s => new { didConvert = int.TryParse(s.TrimNullProtection(), out convertedInt), convertedValue = convertedInt })
            .Where(w => w.didConvert)
            .Select(s => s.convertedValue)
            .ToList();

TrimNullProtection - это настраиваемая функция, которую я создал, которая защищает, если строка равна null.

То, что было сделано выше, - это исключить любые строки, которые не могли быть преобразованы без ошибок. Если вам нужна ошибка, если возникла проблема с преобразованием, тогда принятый ответ должен сделать трюк.

Ответ 10

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

List<int> TagIds = new List<int>();
string[] split = tags.Split(',');
foreach (string item in split)
{
    int val = 0;
    if (int.TryParse(item, out val) == true)
    {
        TagIds.Add(val);
    }
}

Надеюсь, что это поможет.

Ответ 11

Это просто. Сначала разбейте строку. Обрезать пробел после запятой (,). Затем используйте системный определенный ToList()

string TradeTypeEnum = "Physical Deal, Physical Concentrate"

//убрать пробел после ','//и преобразовать этот разделенный запятыми текст в List

List<string> IDs = (tradeTypeEnum.Split(',')).Select(t => t.Trim()).ToList();