У меня есть структура с закрытым методом, который я хотел бы вызвать. Так как я планирую сделать это в критическом разделе производительности, я бы хотел кэшировать делегата для выполнения действия. Проблема в том, что я не могу связать его метод с Delegate.CreateDelegate. Рассматриваемая структура не является моим созданием и используется во взаимодействии со сторонней библиотекой.
Рассматриваемая структура выглядит следующим образом: *
public struct A
{
private int SomeMethod()
{
//body go here
}
}
И следующий код завершится с ошибкой «Ошибка привязки к целевому методу».
Delegate.CreateDelegate(typeof(Func<A,int>),typeof(A).GetMethod("SomeMethod",BindingFlags.Instance | BindingFlags.NonPublic));
Я знаю, что могу написать дерево выражений для выполнения действия, но кажется странным, что я не могу использовать свое обычное goto для этих вещей - метод Delegate.CreateDelegate
.
Приведенный выше код прекрасно работает, если A
был классом. Проблема возникает только потому, что A
является структурой.
Документация MSDN неверна для этой перегрузки CreateDelegate, поскольку она работает на нестатических методах.