我有一个字符串数组,其中包含......嗯,字符串,其中一些是数字。我希望使用 LINQ 仅对字符串中的数字求和。
我想出了这个:
var array = new string[] { "asd", "asd", "53", null, "51", "asd" };
int sum = array.Where(x => int.TryParse(x, out _)).Select(x => int.Parse(x)).Sum();
Run Code Online (Sandbox Code Playgroud)
但是我想知道是否有一种方法可以以某种方式将Where和Select子句统一起来?
谢谢!
您不能组合Whereand Select,但您可以将其更改为仅解析字符串一次
var sum = array
.Select(text => (IsNumber: int.TryParse(text, out var number), Number: number))
.Where(value => value.IsNumber)
.Sum(value => value.Number);
Run Code Online (Sandbox Code Playgroud)
另一种方法可以完成所有事情Sum
var sum = array.Sum(text => int.TryParse(text, out var number) ? number : 0);
Run Code Online (Sandbox Code Playgroud)
实际上,您可以将Where 和Select 子句联合起来,只是因为您计算了总和。
对于文本,如果不是有效数字,则返回 0。
var sum = array
.Select(text => { int.TryParse(text, out var number); return number; })
.Sum();
Run Code Online (Sandbox Code Playgroud)
您可以更进一步,为string. 这将使这样的表达式更简单
public static int ParseOrDefault(string value)
{
int.TryParse(text, out var number);
return number;
}
var sum = array.Sum(value => value.ParseOrDefault());
Run Code Online (Sandbox Code Playgroud)