230

我有一个有数字的字符串

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

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

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

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

4

11 回答 11

555
var numbers = sNumbers.Split(',').Select(Int32.Parse).ToList();
于 2009-05-26T17:03:03.997 回答
36

您也可以在不需要 Linq 的情况下这样做:

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

// Uses Linq
var numbers = Array.ConvertAll(sNumbers.Split(','), int.Parse).ToList();
于 2014-01-17T12:33:26.430 回答
35

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

var numbers = sNumbers
            .Split(',')
            .Where(x => int.TryParse(x, out _))
            .Select(int.Parse)
            .ToList();
于 2018-09-26T19:00:59.507 回答
20

Joze 的方式也需要 LINQ,ToList()是在System.Linq命名空间中。

通过将数组传递给 List 构造函数,您可以在没有 Linq 的情况下将 Array 转换为 List:

List<int> numbers = new List<int>( Array.ConvertAll(sNumbers.Split(','), int.Parse) );
于 2014-08-11T07:22:00.440 回答
12

也可以通过 int 数组直接赋值。

像这样

int[] numbers = sNumbers.Split(',').Select(Int32.Parse).ToArray();
于 2016-05-18T07:00:44.750 回答
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));
于 2016-10-13T10:05:06.213 回答
4

您也可以使用此扩展方法

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(',');
于 2016-02-02T10:44:10.747 回答
3

在 Unity3d 上,int.Parse效果不佳。所以我像下面这样使用。

List<int> intList = new List<int>( Array.ConvertAll(sNumbers.Split(','),
 new Converter<string, int>((s)=>{return Convert.ToInt32(s);}) ) );

希望这对 Unity3d 用户有所帮助。

于 2015-11-20T03:19:06.243 回答
2

我的问题很相似,但有时字符串包含字母(有时为空)带来了不便。

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(); 
}
于 2016-04-14T17:05:36.853 回答
0

当我们有泛型时,为什么只坚持 int ?像这样的扩展方法呢:

    public static List<T> Split<T>(this string @this, char separator, out bool AllConverted)
    {
        List<T> returnVals = new List<T>();
        AllConverted = true;
        var itens = @this.Split(separator);
        foreach (var item in itens)
        {
            try
            {
                returnVals.Add((T)Convert.ChangeType(item, typeof(T)));
            }
            catch { AllConverted = false; }
        }
        return returnVals;
    }

进而

 string testString = "1, 2, 3, XP, *, 6";
 List<int> splited = testString.Split<int>(',', out _);
于 2021-09-30T13:40:49.453 回答
-2

你可以使用这个:

List<Int32> sNumberslst = sNumbers.Split(',').ConvertIntoIntList();
于 2016-08-01T05:52:39.167 回答