有一个集合Dictionary<string, MyClass> products = new Dictionary<string, MyClass>();类的属性之一MyClass—— Group(产品组),类型string。例如,我需要找出集合中是否至少有一个元素具有属性Group = "Мясо"。
if (products.Where(x=>x.Value?.Group == "Мясо").Count()>0)
那么正确吗?谢谢你。对我来说,尽快检查很重要。
让我再解释一下评论中给你的答案。
您的要求不是最优的。您首先通过 Where 选择元素,然后考虑它们的数量。然后才检查它是否为零。
想象一下,您决定使用蛮力进行此检查。在这种情况下,您首先将带有“肉”的元素选择到一个新变量中(占用的内存,吃的时间)。然后用另一个循环计算元素的数量并将其写入一个变量(它们占用内存,第二次通过循环),然后进行比较。
你不会那样做的,对吗?所以我们不要这样做。
您可以结合 Where 和 Count:
它已经变得更好了。但是,是否值得遍历整个数组,或者至少找到一个元素并在找到它后立即退出循环就足够了?
将计数更改为任意:
就是这样,在 linq 中没有其他地方可以优化。
如果您有 IQueryable 而不是 IEnumerable,则需要单独说明第一个优化可以由编译器本身完成,但我不确定编译器是否能够替换 Count > 0 与 Any - 老实说,它会很重要。
我应该用循环替换 linq 吗?不值得 - 我在引擎盖下展示了 Any 具有相同的循环。而且这样的 linq 结构看起来更短、更语义化,因此在阅读时更容易理解。