拆分字符串,在一行中转换ToList <int>()

uza*_*y95 175 c# split list

我有一个有数字的字符串

string sNumbers = "1,2,3,4,5";
Run Code Online (Sandbox Code Playgroud)

我可以将它拆分然后转换为 List<int>

sNumbers.Split( new[] { ',' } ).ToList<int>();
Run Code Online (Sandbox Code Playgroud)

如何将字符串数组转换为整数列表?这样我就可以转换string[]IEnumerable

mqp*_*mqp 429

var numbers = sNumbers.Split(',').Select(Int32.Parse).ToList();
Run Code Online (Sandbox Code Playgroud)

  • 添加空检查: var number = sNumbers?.Split(',').Select(Int32.Parse).ToList(); (6认同)
  • 当列表具有空值或null时,将获得Exception。 (2认同)

Joz*_*oze 31

你也可以这样做而不需要Linq:

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

// Uses Linq
var numbers = Array.ConvertAll(sNumbers.Split(','), int.Parse).ToList();
Run Code Online (Sandbox Code Playgroud)


小智 18

Joze的方式还需要LINQ,ToList()System.Linq命名空间中.

您可以通过将数组传递给List构造函数将Array转换为List而不使用Linq:

List<int> numbers = new List<int>( Array.ConvertAll(sNumbers.Split(','), int.Parse) );
Run Code Online (Sandbox Code Playgroud)


aoz*_*gul 10

更好地使用int.TryParse以避免异常;

var numbers = sNumbers
            .Split(',')
            .Where(x => int.TryParse(x, out _))
            .Select(int.Parse)
            .ToList();
Run Code Online (Sandbox Code Playgroud)


Muk*_*ude 9

int数组也可以直接赋值.

像这样

int[] numbers = sNumbers.Split(',').Select(Int32.Parse).ToArray();
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以使用新的 C# 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));
Run Code Online (Sandbox Code Playgroud)