使用匿名委托返回对象

时间:2011-02-06 07:15:45

标签: c# delegates language-features

是否可以使用匿名委托来返回对象?

像这样:

object b = delegate { return a; };

3 个答案:

答案 0 :(得分:9)

是的,但只能通过调用它:

Func<object> func = delegate { return a; };
// or Func<object> func = () => a;
object b = func();

当然,以下内容更简单......

object b = a;

在评论中,提到了跨线程异常;这可以修复如下:

如果委托是我们想要在 BG线程的UI线程上运行的东西:

object o = null;
MethodInvoker mi = delegate {
    o = someControl.Value; // runs on UI
};
someControl.Invoke(mi);
// now read o

或者相反(在BG上运行委托):

object value = someControl.Value;
ThreadPool.QueueUserWorkItem(delegate {
    // can talk safely to "value", but not to someControl
});

答案 1 :(得分:1)

只需声明这些静态函数:

public delegate object AnonymousDelegate();

public static object GetDelegateResult(AnonymousDelegate function)
{
    return function.Invoke();
}

任何地方都可以按照您的意愿使用它:

object item = GetDelegateResult(delegate { return "TEST"; });

甚至喜欢这个

object item = ((AnonymousDelegate)delegate { return "TEST"; }).Invoke();

答案 2 :(得分:0)

using System;

public delegate int ReturnedDelegate(string s);

class AnonymousDelegate
{
    static void Main()
    {
        ReturnedDelegate len = delegate(string s)
        {
            return s.Length;
        };
        Console.WriteLine(len("hello world"));
    }
}