.NET 4.x Как преобразовать переменную в метод - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет! Есть код:
Листинг программы
  1. p.Value = typeof(string);
  2. Delegate de = Delegate.CreateDelegate(
  3. TD[p.Value],
  4. obj[i],
  5. p.Key);
  6. sq += "'" + Convert.ToString(de.Method.Invoke(obj[i], null)) + "', ";
где
Листинг программы
  1. Dictionary<Type, Type> TD = new System.Collections.Generic.Dictionary<Type, Type>();
  2. TD.Add(typeof(string), typeof(Func<string>));
  3. TD.Add(typeof(int), typeof(Func<int>));
  4. //etc
obj[i] - это некий экземпляр класса из списка объектов, метод которого мы хотим вызвать p.Key - название метода И все работает, ошибок нет. Но медленно. Именно в Method.Invoke медленно Сравнил с таким способом:
Листинг программы
  1. Func<string> de = (Func<string>)Delegate.CreateDelegate(
  2. typeof(Func<string>),
  3. obj[i],
  4. p.Key);
  5. sq += de();
Последний отрабатывает более, чем в 10 раз быстрее, но минус в том, что этот способ не универсален и его надо прописывать для каждого типа... Пробовал его унифицировать, дошел до такого момента:
Листинг программы
  1. Func<string> de = (Func<string>)Delegate.CreateDelegate(
  2. TD[p.Value],
  3. obj[i],
  4. p.Key);
  5. sq += Convert.ToString(de());
Этот код тоже работает, но не универсален. далее пытался так:
Листинг программы
  1. Delegate de = Delegate.CreateDelegate(
  2. TD[p.Value],
  3. obj[i],
  4. p.Key);
  5. sq += Convert.ToString(de());
ошибка:
"de" является "переменная", но используется как "метод"
Как можно это решить? Вот так к сожалению Func < TD[p.Value] >не получается
Хотелось бы что-то наподобие такого:
Листинг программы
  1. Func<TD[p.Value]> de = (Func<TD[p.Value]>)Delegate.CreateDelegate(
  2. TD[p.Value],
  3. obj[i],
  4. p.Key);
  5. sq += Convert.ToString(de());
но не прокатывает(

Решение задачи: «.NET 4.x Как преобразовать переменную в метод»

textual
Листинг программы
  1.         internal static Func<T> CreateDelegate<T>(T obj, string name)
  2.         {
  3.             return (Func<T>)System.Delegate.CreateDelegate(typeof(Func<T>), obj, name);
  4.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы