.NET 4.x Как преобразовать переменную в метод - C#
Формулировка задачи:
Всем привет!
Есть код:
где
obj[i] - это некий экземпляр класса из списка объектов, метод которого мы хотим вызвать
p.Key - название метода
И все работает, ошибок нет. Но медленно. Именно в Method.Invoke медленно
Сравнил с таким способом:
Последний отрабатывает более, чем в 10 раз быстрее, но минус в том, что этот способ не универсален и его надо прописывать для каждого типа...
Пробовал его унифицировать, дошел до такого момента:
Этот код тоже работает, но не универсален.
далее пытался так:
ошибка:
Как можно это решить?
Вот так к сожалению Func < TD[p.Value] >не получается
но не прокатывает(
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 Func<string> de = (Func<string>)Delegate.CreateDelegate(
typeof(Func<string>),
obj[i],
p.Key);
sq += de(); 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]> 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);
}