如何将逗号分隔的字符串转换为List <int>

nac*_*10f 184 .net c# string list

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

List<int> TagIds = tags.Split(',');
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为split方法返回一个字符串[]

请帮忙.

das*_*ght 406

这是一种方法:

List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
Run Code Online (Sandbox Code Playgroud)

  • 那也可以是`List <int> TagIds = new List <int>(tags.Split(',').Select(int.Parse));` (10认同)
  • 要处理标记为空字符串的情况,请使用`Split(new char [] {','},StringSplitOptions.RemoveEmptyEntries) (6认同)
  • 是否需要`new List <>`? (2认同)
  • @LiquidPony没有; 你可以调用`ToList()`; 结果基本相同:`List <int> TagIds = tags.Split(',').选择(int.Parse).ToList();`你需要做一个或另一个,因为返回值`Select()`是`IEnumerable <>`,但不是`List <>` (2认同)

kha*_*d13 22

如果你想包含一些简单的验证并跳过无效值(而不是抛出异常),这里有一些使用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
Run Code Online (Sandbox Code Playgroud)

编辑:这是一个基于Antoine反馈的更新查询.它首先调用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
Run Code Online (Sandbox Code Playgroud)

  • 在C#7.0中,您可以省略mos的声明,并用int.TryParse(m,out int _)替换TryParse调用。 (2认同)

Jus*_*ner 14

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

var tagIds = new List<int>(tags.Split(',').Select(s => int.Parse(s)));
Run Code Online (Sandbox Code Playgroud)


Hen*_*man 7

一点LINQ走了很长的路:

 List<int> TagIds = tags.Split(',')
         .Select(t => int.Parse(t))
         .ToList();
Run Code Online (Sandbox Code Playgroud)


小智 6

如果没有LINQ Query,则可以选择此方法,

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

然后您可以将此列表转换为整数类型...


Oyb*_*bek 5

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

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

  • 根据 https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/how-to-convert-a-string-to-a-number#example 你不需要添加`.Select(x =&gt; x.Trim()`,因为 Parse 会自动为您修剪任何空格字符。 (2认同)