Я хотел бы создать общий делегат, но я знаю только тип во время выполнения.Создать делегат динамически из имени типа
здесь делегат, что я хочу создать:
public delegate void MyDel<T>(T t,string msg);
и здесь является метод, в котором я хочу, чтобы создать экземпляр и использовать делегат
Type typeSet = set.GetType();
MethodInfo method = typeSet.GetMethod("Add");
Delegate test = Delegate.CreateDelegate(typeof(MyDel<typeSet>, method);
где Typeset это неизвестная для меня сборник. и, к сожалению, метод, который я хочу назвать, не является статичным.
У кого-нибудь есть идеи?
Заранее спасибо
спасибо за ваш ответ, как я могу назвать делегата сейчас? что-то вроде этого: if (test! = null) { MyDel <> myDel = (MyDel <>) test; myDel ("blabla"); } – user1005016
@ user1005016: Если у вас есть аргументы, вы можете использовать 'Delegate.InvokeDynamic' и можете быть уверены, что они в порядке, но вы не знаете тип компиляции делегата. –
Я хочу вызвать метод «добавить» на объектных объектах DbSet public delegate void DelegateAddObject (T t, объект DbSet); Тип contextType = (контекст как объект) .GetType(); var set = (contextType.GetProperty (entitySetName)). GetValue (контекст, null); Тип typeSet = set.GetType(); Метод MethodInfo = typeSet.GetMethod ("Добавить"); Тип template = typeof (DelegateAddObject <>); Тип specific = template.MakeGenericType (typeSet); Делегат test = Delegate.CreateDelegate (конкретный, метод); Где контекст - мой dataContext. Но я получаю следующую ошибку: ** Ошибка привязки к целевому методу ** –
user1005016