如何使用Lambda表达式计算C#中的函数,该函数包含LinkedList中多个节点的变量<;对象>;?我 公共静态整数计算器(LinkedList天) { var当前=天。首先; int nightDuration=0; 整数计数=0; while(current.Next!=null) { nightDuration+=ToMinutes(current.Value.sunDown)-ToMinutes(current.Next.Value.sunUp); 当前=当前。下一步; 计数++; } 返回夜间持续时间/计数; }

如何使用Lambda表达式计算C#中的函数,该函数包含LinkedList中多个节点的变量<;对象>;?我 公共静态整数计算器(LinkedList天) { var当前=天。首先; int nightDuration=0; 整数计数=0; while(current.Next!=null) { nightDuration+=ToMinutes(current.Value.sunDown)-ToMinutes(current.Next.Value.sunUp); 当前=当前。下一步; 计数++; } 返回夜间持续时间/计数; },c#,.net,linq,lambda,C#,.net,Linq,Lambda,要求:日期必须存储在LinkedList中 是否有与上述计算器方法等效的干净Lambda表达式?我在使用Lambda计算一个函数时遇到了问题,该函数包含连接节点上的变量 谢谢你的帮助 干杯, Kyle使用计算器的伪代码有很多错误(在本例中用于添加) 有一个类有两个整数。我相信您的想法是将这两个数字与链表中每隔一个节点的两个数字相加。但是,您只添加了配对中的第一个编号,并将其添加到下一个节点的第二个编号。。。我不认为它会起作用 public static int Calculator(Linked

要求:日期必须存储在LinkedList中

是否有与上述计算器方法等效的干净Lambda表达式?我在使用Lambda计算一个函数时遇到了问题,该函数包含连接节点上的变量

谢谢你的帮助

干杯,
Kyle

使用计算器的伪代码有很多错误(在本例中用于添加)

有一个类有两个整数。我相信您的想法是将这两个数字与链表中每隔一个节点的两个数字相加。但是,您只添加了配对中的第一个编号,并将其添加到下一个节点的第二个编号。。。我不认为它会起作用

public static int Calculator(LinkedList<Day> Days)
{
    var current = Days.First;
    int nightDuration = 0;
    int count = 0; 
    while (current.Next != null)
    {
        nightDuration += ToMinutes(current.Value.sunDown) - ToMinutes(current.Next.Value.sunUp);
        current = current.Next;
        count++;
    }
    return nightDuration/count;

}
应该是

array = current.value.int1 + current.Next.value.int2;
工作示例

array = current.value.int1 + current.value.int2;
Lambda expression您可以使用该表达式将所有链表相加,可将其总结为:

18
输出

    LinkedList<Pair> Pairs = new LinkedList<Pair>();
    Pair pair = new Pair() { num1 = 1, num2 = 5 };
    Pairs.AddFirst(pair);
    Pairs.AddLast(pair);
    Pairs.AddLast(pair);
    Console.WriteLine( Calculator(Pairs));
Console.WriteLine(Pairs.Sum(x => x.num1 + x.num2));

希望能有所帮助

看看你的例子,我明白你想说什么了。因此,您希望使用与计算器方法相同的逻辑,但使用Lambda表达式。最简单的方法是使用语言集成查询(LINQ)

因此,分解Calculator()方法,我们看到它实际上包含2个元素

  • 将列表中的num1与num2组合后,求和每个值
  • 将最终结果除以列表中的总计数
  • 实现这一点最简单的方法是使用Enumerable.Sum,然后根据列表的计数来划分该值。例如:

    18
    

    Sum是System.Linq命名空间中的扩展方法。它返回集合中数值的总和

    尽管Lambda表达式非常棒,但请记住可读性也非常重要。它们基本上是匿名函数,如果逻辑变得复杂,其他开发人员/团队成员将很难理解这些函数

    希望这有帮助。祝你好运


    编辑

    所以,如果我理解正确的话,您很难将lambda表达式与嵌套方法一起使用。例如,您的Calculator()方法使用另一个方法ToMinutes

    使用第一个示例中的代码,我们仍然可以使用逻辑。我们必须改变的最重要的部分是总和中的逻辑。例如

    Pairs.Sum(pair => pair.num1 + pair.num2) / Pairs.Count
    
    Result: 6
    
    这只是其中一种方法。另一个选项是创建ExtensionMethod。例如

    Days.Sum(day => ToMinutes(day.sunDown) - ToMinutes(day.sunUp )) / totalDays;
    
    在要使用扩展方法的类之上,只需通过编写

    namespace ExtensionMethods
    {
        public static class IntExtensions
         {
            public static int ToMinutes(this int time)
            {
                return time / 100 * 60 + time - time / 100 * 100;
            }
        }
    }
    
    在文档的顶部

    这将为所有整数提供另一个选项,以将值解析为不同的值。在我们的例子中,时间为分钟

    using ExtensionMethods;
    
    但是再一次。这是一种方法。我建议您阅读Jon Skeet的文章,并深入了解干净代码原则

    无论如何,我想我已经讲清楚了。有关更多详细信息,请参阅


    祝你好运

    我意识到这是伪代码。但是,您确实不希望有一个名为
    Object
    的类;你会遇到与
    系统的名称冲突。Object
    检查lambda表达式:我想了解一下为什么我的问题会被否决,这样我可以在将来改进我的帖子。谢谢我尝试过各种方法,但最终意识到,您的数据只是一个列表,而不是一个链接列表。对于这种结构,使用像你这样的方法会更容易(除非其他人能给你更好的答案),谢谢你花时间来帮助我。我已经更新了我的帖子,希望能更清楚地显示我在寻找什么。你差一点,只是少了几件东西。完全是我的错,因为我的例子不清楚。谢谢你的耐心。我在帖子的末尾有一个lambda表达式,这不是你需要的吗?是的,但是这个表达式没有达到我想要的。我更新了我的示例以表示一个现实世界的问题。希望这有助于澄清我在寻找什么。谢谢谢谢你的回复,@Scircia。我更新了我的示例,希望能更好地说明我的问题。我的问题是,我不知道如何在lambda表达式中包含来自多个连接节点的变量。可读性是非常重要的,所以不要试图在所有事情上都使用Lambda。除此之外。我已经更改了你的一些代码。我会用我的答案解释我做了什么。有很多方法可以解决这个问题,这取决于用法、可读性、偏好等。但我想你们大概会明白我要说的内容。
    Pairs.Sum(pair => pair.num1 + pair.num2) / Pairs.Count
    
    Result: 6
    
    Days.Sum(day => ToMinutes(day.sunDown) - ToMinutes(day.sunUp )) / totalDays;
    
    namespace ExtensionMethods
    {
        public static class IntExtensions
         {
            public static int ToMinutes(this int time)
            {
                return time / 100 * 60 + time - time / 100 * 100;
            }
        }
    }
    
    using ExtensionMethods;
    
    int totalDays = Days.Count;
    int averageMinutes = Days.Sum(day => day.sunDown.ToMinutes() - day.sunUp.ToMinutes()) / totalDays;
    Console.WriteLine("There is an average of {0} minutes of night over the past {1} days.", averageMinutes, totalDays);