Создание массива делегатов из массива MethodInfo[]

220
30 марта 2018, 09:56

Хай! Получаю все нужные методы

MethodInfo[] methodInfos = this.GetType().GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);

Есть словарь, Dictionary<string, Action<MethodParam>> methods; Т.е. метод должен получить экземпляр типа MethodParam. Как MethodInfo добавть в этот словарь? Т.е.

foreach (var item in methodInfos)
    {
        methods.Add(item.Name.ToLower(), x => Delegate.CreateDelegate(typeof(Action<MethodParam>), x, item));
    }

Что-то типа этого.

Спасибо!

Answer 1

Если методы все с одинаковой сигнатурой, подойдёт такое:

var dict = methodInfos.ToDictionary(
    mi => mi.Name.ToLowerInvariant(),
    mi => (Action<MethodParam>)Delegate.CreateDelegate(
              typeof(Action<MethodParam>), this, mi));
READ ALSO
Вывести элементы в виде таблицы WPF

Вывести элементы в виде таблицы WPF

Как расположить элементы через Binding в виде таблицы? DataGrid не предлагайте, не подходит

247
Получить имя контроллера asp.net при помощи nameof

Получить имя контроллера asp.net при помощи nameof

Внимание! Это перевод вопроса How to use C# nameof() with ASPNET MVC Url

217
VS загружает ЦП на 40%

VS загружает ЦП на 40%

Товарищи, тут возникла следующая проблемка: имею в VS проект на С#, в котором имеется статический класс, в статическом инициализаторе которого...

200
Помогите превести код из C++ в С# [требует правки]

Помогите превести код из C++ в С# [требует правки]

Помогите перевести код из С++ в С#

196