views:

132

answers:

2

I hava a delegate

public delegate void Context();

And i had implemented it by anonymous method,

public Context fakeHttpContext = () =>
        {
                ...
                create fake http context.
        };

I dont' want to execute the fakeHttpContext by


    fakeHttpContext.Invoke()

I wonder if i could invoke it by known the delegate name. is there anything in reflection likes:


    DelegateInfo info =     typeof(class).GetDelegate("fakeHttpContext");
    info.Invoke();

thanks

+1  A: 

What you really want to do is getting the field fakeHttpContext. Assuming you class type is named MyObject :

MyObject obj = new MyObject();
Context context = (Context)(typeof(MyObject).GetField("fakeHttpContext").GetValue(obj));
context();

This is what you asked for, even if it's dirty... Reflection is rarely a good idea.

Guillaume
thanks,it works
+2  A: 

Don't you find it a bit odd to try to retrieve an anonymous method by name? It's kind of a contradiction in itself.

That mere fact should give you a hint that what you're doing probably makes no sense. Just declare an standard method that implements the delegate or an event and invoke it.

Jorge Córdoba