给出这个字符串值列表:
"12345"
,"6789a"
,"9876"
,"23467b"
我们如何在C#中使用Linq语句来仅选择整数?换句话说,我们只想返回12345
和9876
。
答案 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();