我有一个有数字的字符串

string sNumbers = "1,2,3,4,5";

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

sNumbers.Split( new[] { ',' } ).ToList<int>();

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


当前回答

最好使用int。TryParse避免异常;

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

其他回答

var numbers = sNumbers?.Split(',')?.Select(Int32.Parse)?.ToList();

最新版本的c# (v6+)允许您使用空条件操作符进行空检查

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

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

// Uses Linq
var numbers = Array.ConvertAll(sNumbers.Split(','), int.Parse).ToList();

Joze的方法也需要LINQ, ToList()是在系统。Linq命名空间。

你可以将Array转换为List而不需要Linq,通过将数组传递给List构造函数:

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

我的问题类似,但有时字符串包含字母(有时为空)。

string sNumbers = "1,2,hh,3,4,x,5";

尝试遵循Pcode Xonos扩展方法:

public static List<int> SplitToIntList(this string list, char separator = ',')
{
      int result = 0;
      return (from s in list.Split(',')
              let isint = int.TryParse(s, out result)
              let val = result
              where isint
              select val).ToList(); 
}

你也可以使用这个扩展方法

public static List<int> SplitToIntList(this string list, char separator = ',')
{
    return list.Split(separator).Select(Int32.Parse).ToList();
}

用法:

var numberListString = "1, 2, 3, 4";
List<int> numberList = numberListString.SplitToIntList(',');