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

C# 查找字符串列表中的所有整数,c#,linq,parsing,int,C#,Linq,Parsing,Int,给定此字符串值列表: “12345”,“6789a”,“9876”,“23467b” 如何在C#中使用Linq语句仅选择整数?换句话说,我们只想返回12345和9876您可以根据方法的返回值筛选条目: 将列表向下筛选为所有字符均为数字的字符串: var filtered = list.Where(s => s.All(char.IsDigit)); 另一种方法是使用int.TryParse作为过滤函数,该函数在行为上有许多细微的差异(有效整数的规则允许不仅仅是数字,请参阅) 如果要将结果

给定此字符串值列表:

“12345”
“6789a”
“9876”
“23467b”


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

您可以根据方法的返回值筛选条目:


将列表向下筛选为所有字符均为数字的字符串:

var filtered = list.Where(s => s.All(char.IsDigit));
另一种方法是使用
int.TryParse
作为过滤函数,该函数在行为上有许多细微的差异(有效整数的规则允许不仅仅是数字,请参阅)


如果要将结果键入整数,请使用
。选择(int.Parse)

使用
int
TryParse
方法可以最可靠地指示您有一个正确的数字

像这样使用它:

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

IEnumerable<int> ints = strings.Where(str => str.All(Char.IsDigit))
    .Select(str => int.Parse(str));
然后可以使用此查询:

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

这将丢失负值,以及带有前导或尾随空格的整数。@道格拉斯:答案中明确提到了这一点;我添加了一个文档链接。是的,我总结了人们可能会遇到的主要差异。另一方面,如果全数字假设对OP的数据有效,则此方法可能比
int.TryParse
更有效。
temp
值的行为是未记录的实现细节,将来可能会更改。“我更喜欢。”蒂姆·施梅尔特:正确的观点。但是,只要后续代码不使用
temp
的最终值,上述解决方案仍然正确。可以将上述代码段封装在专用语句块中以实现这一点。
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);