计数 = 0?,c#,linq,dictionary,grouping"/>

首页 > 解决方案 > 如何为 IGrouping 设置默认值计数 = 0?

问题描述

我喜欢 C# linq 以及扩展方法风格。

这是一个简单的代码,用于获取数组中每个数字的次数

    static void Main(string[] args)
    {
        int[] nums = { 1, 2, 2, 3, 3, 3 };
        var groups = nums.GroupBy(n => n);
        //var keynums = nums.Distinct();//ok
        var keynums = Enumerable.Range(0, 10);//causes ArgumentNullException
        var timesDict = keynums.ToDictionary(n => n,
            n =>
            groups.FirstOrDefault(g => g.Key == n)
            //((groups.FirstOrDefault(g => g.Key == n))??what can be put here)
            .Count());
        foreach (var kv in timesDict)
        {
            Console.WriteLine($"{kv.Key}\t{string.Join(" ", kv.Value)}");
        }
        Console.ReadKey();
    }

该代码有效,但如果我想知道 nums总是 [0-9] ,并且想知道[0-9]出现了多少次(如果没有出现,则计数应该是0)。

所以代码会得到ArgumentNullException,这是有道理的,因为FirstOrDefault得到了null

所以要解决这个问题,我想使用??运算符,并给它一个默认值。但我想不出如何构建这样的价值。

你会怎么解决?请不要使用其他样式,例如if, select new {}

标签: c#linqdictionarygrouping

解决方案


像这样使用 C#6 空传播怎么样?

groups.FirstOrDefault(g => g.Key == n)?.Count() ?? 0

如果FirstOrDefault返回 null,?.Count()将不再评估,也不会抛出异常。


推荐阅读