鉴于此字符串值列表:
"12345"
, "6789a"
, "9876"
,"23467b"
我们如何在 C# 中使用 Linq 语句来仅选择整数?换句话说,我们只想返回12345
and 9876
。
您可以根据Int32.TryParse
方法的返回值过滤您的条目:
int temp;
list.Where(x => int.TryParse(x, out temp));
将列表过滤为仅包含所有字符都是数字的字符串:
var filtered = list.Where(s => s.All(char.IsDigit));
另一种方法是int.TryParse
用作过滤函数,它在行为上有许多细微差别(有效整数的规则允许的不仅仅是数字,请参阅文档)。
如果您希望将结果键入为整数,请使用.Select(int.Parse)
.
单程:
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);
的TryParse
方法int
是您拥有正确数字的最可靠指标。
像这样使用它:
int number = 0;
var selected = list.Where(x => int.TryParse(x, out number)).ToList();