【问题标题】:lambda expression for traversing through an array用于遍历数组的 lambda 表达式
【发布时间】:2012-01-12 05:31:43
【问题描述】:

我是一个 lambda 菜鸟

我正在寻找一种使用匿名方法来总结计数变量结果的方法 在我的项目中

class SomeObject
{
    public int Count{get;}
}

SomeObject [] items = new SomeObject[]{......};  

我正在寻找一个 lambda 表达式来总结并返回所有计数的数量 类似于

的东西
Func<SomeObject[],int> counter =  // the lambada i don't know how to write.

感谢任何帮助和对一些好的教程的参考

我不想发布另一个困境,扩展都很好 但是如果我需要执行一个不是为集合内置的过程怎么办 像 Sum , Where , Select ...ext。

例如:

     string description = string.empty; 
     foreach(var provider in Providers)
     {
            description += provider.Description ;
     }
     return decapitation .

iv'e 将其封装在 Func 委托中,但我需要使用 lambda 表达式将该委托引用到匿名方法,该方法执行上述代码,我只是无法弄清楚这样做的语法。

一般来说,我正在寻找一种方法来编写一个 foreach 循环,并使用 lambda 表达式来编写它的逻辑

(仅供参考,代码是示例性的,没有实际用途)。

【问题讨论】:

    标签: c# delegates lambda


    【解决方案1】:

    你正在寻找这样的东西:

    var sum = items.Sum(i => i.Count);
    

    Sum 是 LINQ 提供的一种扩展方法,它对可枚举的项目序列求和。在这种情况下,由于项目(类型为SomeObject)本身不能相加,因此您希望使用接受 lambda 的 Sum 的重载。此 lambda 用于从每个项目中提取“可求和”值。

    在这种情况下,“summable”值是每个SomeObject 的Count,因此是i =&gt; i.Count。

    【讨论】:

    • 这仅适用于通用集合,我使用的是没有扩展的数组
    • @eranotzer:在您的示例中,我们看到一个类型化数组,这些扩展方法为do apply(当然您需要使用using System.Linq)。如果您所拥有的与您发布的不完全相同,请编辑问题。
    • 数组是一个泛型集合:SomeObject[] 是 IEnumerable 的一个可能实例。如果它对您不起作用,那是因为您没有引用正确的命名空间。 “使用 System.Linq;”应该足以让它工作。
    • 好的,谢谢,我没想到现在可以添加 LINQ 命名空间。
    • 嗨@Jon,在这个问题上,也许你可以帮我做点什么。 (再看帖子)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 2013-12-22
    • 1970-01-01
    • 2010-09-08
    • 2016-01-11
    • 1970-01-01
    相关资源
    最近更新 更多