string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',');
Это не работает, потому что метод split возвращает строку []
string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',');
Это не работает, потому что метод split возвращает строку []
Ответы:
Вот один из способов сделать это:
List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
List<int> TagIds = new List<int>(tags.Split(',').Select(int.Parse));
new List<>
?
ToList()
вместо этого; результат по сути тот же: List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
вам нужно сделать одно или другое, потому что возвращаемое значение Select()
является IEnumerable<>
, но неList<>
Select
расширение в этом случае возвращает IEnumerable<Int32>
и его нет в списке. Однако в списке есть конструктор, принимающий другую коллекцию в качестве источника.
Split(new char[] {','}, StringSplitOptions.RemoveEmptyEntries)
Если вы хотите включить простую проверку и пропустить недопустимые значения (вместо создания исключения), вот что использует 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
Изменить 2: обновленный запрос для C # 7.0, благодаря обратной связи от Чарльза Бернса. Обратите внимание, что с помощью этого подхода мы избавляемся от дополнительной переменной mos, поэтому она немного чище.
string csv = "1,2,3,4,a,5,0,3,r,5";
var intList = csv.Split(',')
.Where(m => int.TryParse(m, out _))
.Select(m => int.Parse(m))
.ToList();
int.TryParse(m, out int _)
Вы можете использовать LINQ w / int.Parse()
для преобразования в string[]
a, IEnumerable<int>
а затем передать этот результат в List<T>
конструктор:
var tagIds = new List<int>(tags.Split(',').Select(s => int.Parse(s)));
Немного LINQ проходит долгий путь:
List<int> TagIds = tags.Split(',')
.Select(t => int.Parse(t))
.ToList();
Без LINQ Query, вы можете выбрать этот метод,
string tags = "9,3,12,43,2";
List<string> numbers = nos.Split(',').ToList<string>();
и затем вы можете преобразовать этот список в целочисленный тип ...
.ToList<string>()
все еще нуждаетсяusing System.Linq;
string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',').Select(x => x.Trim()).Select(x=> Int32.Parse(x)).ToList();
.Select(x => x.Trim()
, так как Parse автоматически обрезает любые пробелы для вас.
Если вы используете C # 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();
string tags = "9,3,12,43,2";
List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
Я внес изменение в ответ 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.
Вышесказанное удаляет все строки, которые не удалось преобразовать без ошибок. Если вам нужна ошибка, если возникла проблема с конвертацией, тогда принятый ответ должен помочь.
Я наткнулся на это, и я просто хочу поделиться своим собственным решением без 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);
}
}
Надеюсь это поможет.
Это просто. Сначала разбейте строку. Обрезать пробел после запятой (,). Затем используйте системный определенный ToList ()
string TradeTypeEnum = "Physical Deal, Physical Concentrate"
Чтобы удалить пробел после ',' и преобразовать этот разделенный запятыми текст в список
List<string> IDs = (TradeTypeEnum.Split(',')).Select(t => t.Trim()).ToList();