Lambda函数使用委托

时间:2013-02-03 13:30:49

标签: c# delegates lambda

我有以下内容:

class Program {

    delegate int myDelegate(int x);

    static void Main(string[] args) {

        Program p = new Program();
        Console.WriteLine(p.writeOutput(3, new myDelegate(x => x*x)));

        Console.WriteLine("press [enter] to exit");
        Console.ReadLine();
    }
    private string writeOutput(int x, myDelegate del) {
        return string.Format("{0}^2 = {1}",x, del(x));
    }
}

上面的方法writeOutput是否需要?如果没有writeoutput,可以重写以下内容以输出与上面相同的内容吗?

是否可以修改行Console.WriteLine("x^2 = {0}", new myDelegate(x => x*x));以便将3输入函数?

class Program {

    delegate int myDelegate(int x);

    static void Main(string[] args) {

        Program p = new Program();

        Console.WriteLine("x^2 = {0}", new myDelegate(x => x*x));

        Console.WriteLine("press [enter] to exit");
        Console.ReadLine();
    }
}

3 个答案:

答案 0 :(得分:1)

显然不能这样写。想一想: x 在第二个代码中有什么价值?你创建了一个委托实例,但是当它被调用时?

使用此代码:

myDelegate myDelegateInstance = new myDelegate(x => x * x);
Console.WriteLine("x^2 = {0}", myDelegateInstance(3));

答案 1 :(得分:1)

你真的不需要代表。 但为了工作,你需要改变这一行:

    Console.WriteLine("x^2 = {0}", new myDelegate(x => x*x));

用这个:

    Console.WriteLine("{0}^2 = {1}", x, x*x);

答案 2 :(得分:1)

首先,您不需要委托。你可以直接乘以它。但首先是对代表的更正。

myDelegate instance = x => x * x;
Console.WriteLine("x^2 = {0}", instance(3));

您应该像处理函数一样处理委托的每个实例,就像在第一个示例中一样。 new myDelegate(/* blah blah */)不是必需的。你可以直接使用lambda。

我假设你正在练​​习使用delegates / lambdas,因为你可以写下这个:

Console.WriteLine("x^2 = {0}", 3 * 3);