标签: anonymous-delegates

C#中的lambda表达式?

我是新手,有人可以解释(以下代码)的意义,或者可能链接到一些关于lambda表达式的有用信息?我在测试中遇到以下代码,我想知道为什么有人会这样做:

foo.MyEvent += (o, e) => { fCount++; Console.WriteLine(fCount); };

foo.MyEvent -= (o, e) => { fCount++; Console.WriteLine(fCount); };
Run Code Online (Sandbox Code Playgroud)

我的直觉告诉我这是一件简单而不是错误的事情,但我对这些表达方式知之甚少,无法理解为什么要这样做.

c# lambda anonymous-delegates

2
推荐指数
1
解决办法
673
查看次数

请帮我理解匿名代表?

我从Microsoft下载了VCSharpSample包,并开始阅读Anonymous Delegates.我可以或多或少地理解代码在做什么,但我不明白它背后的原因.也许如果你给我一些例子,它会导致更清晰的代码和更容易维护,那么我可以绕过它.:)

你能帮我吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    delegate decimal CalculateBonus(decimal sales);

    class Player
    {
        public string Name;
        public decimal Score;
        public decimal Bonus;
        public CalculateBonus calculation_algorithm;
    }

    class Program
    {        
        static decimal calculateStandardBonus(decimal sales)
        {
            return sales / 10;
        }

        static void Main(string[] args)
        {
            decimal multiplier = 2;

            CalculateBonus standard_bonus = new CalculateBonus(calculateStandardBonus);
            CalculateBonus enhanced_bonus = delegate(decimal sales) { return multiplier * sales / 10; };

            Player[] players = new Player[5];

            for …
Run Code Online (Sandbox Code Playgroud)

c# anonymous-delegates

2
推荐指数
1
解决办法
161
查看次数

什么是这种类型的委托(C#)

我有这些代码行.

class Program
{
    public delegate void printer();

    public static void Method()
    {
        Console.WriteLine("Hello");
    }
    static void Main(string[] args)
    {
        printer del = delegate { Method(); };
        del();
        Console.ReadKey();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我怎么称呼这句话printer del = delegate { Method(); };.

当然它不能被称为匿名方法,因为在这里我有一个命名方法.

.net c# delegates anonymous-delegates

1
推荐指数
2
解决办法
174
查看次数

使用.net2返回委托的方法

我一直在.net 4工作,真的很享受从单一方法返回定制函数的能力,例如:

public Func<object, object> FunctionBuilder(object o) 
{ /*build functions, woo*/ }
Run Code Online (Sandbox Code Playgroud)

...但是,如果不是不可能在.net2中执行,这似乎非常困难,因为Func出现在.net3.5(?)中,类似于:

public delegate<object> FunctionBuilder(object o) 
{ /*nope*/ }
Run Code Online (Sandbox Code Playgroud)

...是无效的语法..

甚至可以从.net2中的方法返回定制函数吗?

.net c# delegates anonymous-delegates .net-2.0

1
推荐指数
1
解决办法
153
查看次数

一个方法如何等到匿名委托完成?

我有以下代码片段(作为示例)查找联系人:

public string Search()
{
    string address = "";

    ContactManager manager = new ContactManager();

    // LookupComplete is just a plain event
    manager.LookupComplete += delegate
    {
        address = manager.Address;
    };

    manager.SearchFor("bob");
    return address; // Address always appears to be populated
}
Run Code Online (Sandbox Code Playgroud)

更新:
这是ContactManager:

public class ContactManager
{
    public string Address {get;set;}
    public event LookupComplete;

    public void SearchFor(string query)
    {
        SomeParser parser = new Parser();
        parser.TokenParsed += new EventHandler<TokenParseEventArgs>(tokenParsed);
        parser.Parse(query);    
    }

    private void tokenParsed(object sender,TokenParseEventArgs e)
    {
        if (e.Message == "EOF")
        { …
Run Code Online (Sandbox Code Playgroud)

c# events anonymous-methods anonymous-delegates

0
推荐指数
1
解决办法
686
查看次数

为什么匿名代表看起来比常规代表更快?

有人可以告诉我为什么匿名代表的运行速度比普通代表快得多吗?我Stopwatch在for循环中看到了用class 诊断的结果,差异很大.如果您在普通委托中运行以下代码,它运行速度会慢很多.我在视频中看到了这种比较,基本上我被建议使用匿名代表而不是常规代表,以便在有情况时使用.

class Program {
    delegate int PointtoAddFunction(int num1, int num2);

    static void Main(int argNum1, int argNum2) {
        Stopwatch objWatch=new Stopwatch();

        for(int y=0; y>10; y++) {
            objWatch.Reset();
            objWatch.Start();

            for(int i=0; i>1000; i++) {
                PointtoAddFunction pobjAdd=
                    delegate(int num1, int num2) {
                        return num1+num1;
                    };

                Console.WriteLine(pobjAdd.Invoke(2, 2).ToString());
            }

            objWatch.Stop();
            Console.WriteLine(objWatch.EleapsedTickes.ToString());
        }
    }

    static int Add(int num1, int num2) {
        return num1+num2;
    }
}
Run Code Online (Sandbox Code Playgroud)

c# performance delegates anonymous-delegates

-2
推荐指数
1
解决办法
280
查看次数