Search code examples
c#delegateslanguage-features

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; };

Solution

  • 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
    });