是否可以使用匿名委托来返回对象?
像这样:
object b = delegate { return a; };
答案 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"));
}
}