Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using an anonymous delegate to return an object

Is it possible to use an anonymous delegate to return an object?

Something like so:

object b = delegate { return a; };
like image 925
wulfgarpro Avatar asked Feb 06 '11 07:02

wulfgarpro


Video Answer


2 Answers

Yes, but only by invoking it:

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

And of course, the following is a lot simpler...

object b = a;

In the comments, cross-thread exceptions are mentioned; this can be fixed as follows:

If the delegate is the thing we want to run back on the UI thread from a BG thread:

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

Or the other way around (to run the delegate on a BG):

object value = someControl.Value;
ThreadPool.QueueUserWorkItem(delegate {
    // can talk safely to "value", but not to someControl
});
like image 169
Marc Gravell Avatar answered Oct 18 '22 01:10

Marc Gravell


Just declare somewhere these static functions:

public delegate object AnonymousDelegate();

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

And anywhere use it as you want like this:

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

or even like this

object item = ((AnonymousDelegate)delegate { return "TEST"; }).Invoke();
like image 1
Basil Avatar answered Oct 18 '22 01:10

Basil