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);