使用 LINQ 对字符串数组中的所有数字求和

Shr*_*ger 0 c# linq

我有一个字符串数组,其中包含......嗯,字符串,其中一些是数字。我希望使用 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)

但是我想知道是否有一种方法可以以某种方式将WhereSelect子句统一起来?

谢谢!

Fab*_*bio 5

您不能组合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)