【问题标题】:How to count in anonymous method?如何计算匿名方法?
【发布时间】:2020-03-25 23:42:18
【问题描述】:

我有一个 IntList 类的实现。我应该:使用匿名方法的能力在其封闭方法中引用局部变量,并使用定义的“Act”方法来计算 IntList 元素的总和(无需自己编写任何循环)。这是我到目前为止所做的,但我怀疑它是否正确。任何建议和解释都会在这里帮助我

在这种情况下,我的匿名方法的封闭方法是什么?

public delegate bool IntPredicate(int x);
public delegate void IntAction(int x);


class IntList : List<int>
{
    public IntList(params int[] elements) : base(elements)
    {

    }

    public void Act(IntAction f)
    {
        foreach(int i in this)
        {
            f(i);
        }
    }

    public IntList Filter(IntPredicate p)
    {
        IntList res = new IntList();
        foreach (int i in this)
        {
            if (p(i))
            {
                res.Add(i);
            }
        }
        return res;
    }

}

class Program
{
    static void Main(string[] args)
    {
        // code here
        IntList xs = new IntList();
        // adding numbers, could be random. whatever really. Here just 0..29
        for(int i =0; i<30; i++)
        {
            xs.Add(i);
        }

        int total = 0;
        xs.Act(delegate (int x)
                        {
                            total = total + x;
                            Console.WriteLine(total);
                        }
               );
        Console.ReadKey();
    }
}

【问题讨论】:

  • “我怀疑它是否正确。任何建议和解释都会对我有所帮助”——这对 Stack Overflow 的要求太宽泛了。一方面,您需要知道它是否正确。如果它是正确的,你甚至不需要发布一个问题。如果它不正确,您需要能够准确地解释它在什么方面是不正确的。该程序做了什么,而您希望它做什么? 具体来说是什么让你自己搞不清楚?
  • 当然可以,但我不知道这就是我要问的原因。我将重新制定请求
  • “我不知道是哪个” -- Stack Overflow 社区无法在没有实际问题的情况下为问题提供好的答案.您必须能够准确地阐明代码应该做什么以及它现在正在做什么,这与它应该做什么不同。如果你不能,那么你的问题应该(并且很可能会)被关闭和删除。
  • 总结元素,而不编写自己的循环?听起来像是 LINQ 的一个案例。 |或者可能是您的目标是覆盖添加、删除和清除功能,以便您可以在添加/删除内容时进行总结。

标签: c# delegates local-variables anonymous-methods


【解决方案1】:

我认为这部分是“匿名方法”(因为它是内联定义的并且没有方法名称):

delegate (int x)
{
    total = total + x;
    Console.WriteLine(total);
}

我认为“封闭方法”是Main()

我认为“局部变量”很可能是total

我运行了你的代码,我觉得它是正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    相关资源
    最近更新 更多