4

鉴于此字符串值列表:

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

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

4

4 回答 4

13

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

int temp;
list.Where(x => int.TryParse(x, out temp));
于 2013-09-30T10:03:30.087 回答
6

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

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

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

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

于 2013-09-30T10:03:34.890 回答
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);
于 2013-09-30T10:04:17.640 回答
3

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

像这样使用它:

int number = 0;
var selected = list.Where(x => int.TryParse(x, out number)).ToList();
于 2013-09-30T10:04:04.580 回答