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

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

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

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

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

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

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


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

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

8   голосов , оценка 3.875 из 5
Похожие ответы