как динамически вызывать анонимного делегата - PullRequest
0 голосов
/ 18 ноября 2009

У меня есть делегат

public delegate void Context();

И я реализовал это анонимным методом,

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

Я не хочу выполнять fakeHttpContext


    fakeHttpContext.Invoke()

Интересно, могу ли я вызвать его по известному имени делегата? есть ли что-нибудь в отражении лайков:


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

спасибо

Ответы [ 2 ]

4 голосов
/ 18 ноября 2009

Не кажется ли вам странным пытаться получить анонимный метод по имени ? Это своего рода противоречие само по себе.

Этот простой факт должен дать вам подсказку, что то, что вы делаете, вероятно, не имеет смысла. Просто объявите стандартный метод, который реализует делегат или событие, и вызовите его.

2 голосов
/ 18 ноября 2009

Что вы действительно хотите сделать, так это получить поле fakeHttpContext. Предполагая, что ваш тип класса называется MyObject:

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

Это то, что вы просили, даже если оно грязное ... Отражение редко бывает хорошей идеей.

...