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

Ale*_*lex 4 c# linq int parsing

给定此字符串值列表:

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

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

Dou*_*las 12

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

int temp;
list.Where(x => int.TryParse(x, out temp));
Run Code Online (Sandbox Code Playgroud)


Jon*_*Jon 6

将列表过滤为仅包含所有字符为数字的字符串:

var filtered = list.Where(s => s.All(char.IsDigit));
Run Code Online (Sandbox Code Playgroud)

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

如果您希望将结果键入为整数,请按照此处进行操作.Select(int.Parse).

  • 这将错过负值,以及带有前导或尾随空格的整数. (4认同)

Tim*_*ter 5

单程:

IEnumerable<int> ints = strings.Where(str => str.All(Char.IsDigit))
    .Select(str => int.Parse(str));
Run Code Online (Sandbox Code Playgroud)

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

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

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

然后你可以使用这个查询:

IEnumerable<int> ints = strings.Select(str => str.TryGetInt())
    .Where(nullableInt => nullableInt.HasValue)
    .Select(nullableInt => nullableInt.Value);
Run Code Online (Sandbox Code Playgroud)