分割字符串,将ToList<int>()转换为一行

我有一个有数字的字符串

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

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

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

如何将字符串数组转换为整数列表? 因此,我将能够将string[]转换为IEnumerable

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

最新版本的c# (v6+)允许您使用null-conditional运营商进行空检查

你也可以这样做,而不需要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()System.Linq命名空间中。

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

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

在Unity3d上,int.Parse不能很好地工作。所以我用波纹管。

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

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

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

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(',');

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

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();
}

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

像这样

int[] numbers = sNumbers.Split(',').Select(Int32.Parse).ToArray();

你可以用这个:

List<Int32> sNumberslst = sNumbers.Split(',').ConvertIntoIntList();

你可以使用新的c# 6.0语言特性:

    将委托(s) => { return Convert.ToInt32(s); }替换为 对应的方法组Convert.ToInt32
  • 用:Convert.ToInt32替换多余的构造函数调用:new Converter<string, int>(Convert.ToInt32)

结果将是:

var intList = new List<int>(Array.ConvertAll(sNumbers.Split(','), Convert.ToInt32));

最好使用int.TryParse来避免异常;

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

当我们有泛型时,为什么只坚持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 _);