查找字符串列表中的所有整数

时间:2013-09-30 10:02:02

标签: c# linq parsing int

给出这个字符串值列表:

"12345""6789a""9876""23467b"

我们如何在C#中使用Linq语句来仅选择整数?换句话说,我们只想返回123459876

4 个答案:

答案 0 :(得分:11)

您可以根据Int32.TryParse方法的返回值过滤条目:

int temp;
list.Where(x => int.TryParse(x, out temp));

答案 1 :(得分:6)

将列表向下过滤为所有字符均为数字的字符串:

var filtered = list.Where(s => s.All(char.IsDigit));

另一种方法是使用int.TryParse作为过滤函数,它在行为上有许多细微差别(有效整数允许的规则不仅仅是数字,请参阅documentation

如果您希望将结果输入为整数,请使用.Select(int.Parse)

进行操作

答案 2 :(得分:5)

一种方式:

IEnumerable<int> ints = strings.Where(str => str.All(Char.IsDigit))
    .Select(str => int.Parse(str));

这仅选择所有字符都是数字的字符串。然后它将它们解析为int

更好的方法是使用此扩展程序:

public static int? TryGetInt(this string item)
{
    int i;
    bool success = int.TryParse(item, out i);
    return success ? (int?)i : (int?)null;
}

然后您可以使用此查询:

IEnumerable<int> ints = strings.Select(str => str.TryGetInt())
    .Where(nullableInt => nullableInt.HasValue)
    .Select(nullableInt => nullableInt.Value);

答案 3 :(得分:3)

TryParse int方法是您拥有正确数字的最可靠指标。

像这样使用:

int number = 0;
var selected = list.Where(x => int.TryParse(x, out number)).ToList();