如何将逗号分隔的string转换为List <int>

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

这不工作导致拆分方法返回一个string[]

请帮忙。

这是做这件事的一种方法:

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

您可以使用LINQ w / int.Parse()string[]转换为IEnumerable<int> ,然后将该结果传递给List<T>构造函数:

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

如果你想包括一些简单的validation和跳过无效值(而不是抛出一个exception),这里有一些使用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 

一点LINQ很长一段路要走:

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

没有LINQ Query,你可以select这个方法,

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

然后你可以将这个列表转换为整数types…

 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(x => x.Trim()).Select(x=> Int32.Parse(x)).ToList(); 

如果您使用的是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(); 

我偶然发现了这一点,我只想分享我自己的解决scheme没有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); } } 

希望这可以帮助。

我修改了khalid13的答案。 如果用户input一串“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是我所做的一个自定义函数,如果string为空,它可以提供保护。

上面所做的是去掉任何无法转换的string。 如果您在转换过程中遇到问题需要出错,那么接受的答案应该可以做到。