Есть ли способ передать метод в качестве параметра, не зная ничего о методе заранее?Метод C# как параметр
Можно ли назвать Func<input, return>
без знания параметра метода/типа возврата?
Есть ли способ передать метод в качестве параметра, не зная ничего о методе заранее?Метод C# как параметр
Можно ли назвать Func<input, return>
без знания параметра метода/типа возврата?
Ближе всего вы можете использовать Delegate
- вызывающему нужно будет выбрать нужный тип делегата. Именно поэтому Control.Invoke
использует Delegate
вместо определенного типа делегата.
В качестве альтернативы, есть MethodInfo
, как предлагает HackedByChinese. Какой из них вы должны использовать, зависит от того, чего вы пытаетесь достичь - каждый из них полезен в разных контекстах. Если вы пытаетесь описать метод, то MethodInfo
, вероятно, лучший подход. Если вы пытаетесь представить вызываемое действие какого-либо типа (которое может принимать параметры и иметь возвращаемое значение), то делегат, вероятно, более полезен.
Если вы расскажете нам больше о том, чего вы пытаетесь достичь, мы сможем вам помочь.
Это звучит, что вызов метода с помощью отражения будет то, что вы заинтересованы в.
См MethodInfo.
Для этого вам необходимо использовать делегат. Есть несколько сообщений в Stackoverflow, которые покрывают это.
Я предлагаю this, особенно Джон тарелочкам ответ
Кажется, что вы могли бы быть переустройства здесь .. Вы должны правильно смотреть на окружающий вас в инфраструктур коде, и попытаться реорганизовать, что вместо этого.
Но если вам действительно нужно, вы можете сделать это с помощью дженериков. Теперь я бы не рекомендовал этого - но эту функцию вы могли бы назвать чем угодно, вам нужно было бы определить Y и T и время вызова.
public virtual Y MyWrapperFunction<T,Y>(Func<T,Y> func, T param)
{
return func(param);
}
Но имейте в виду - дженерики может дать вам все виды различных проблем;)
Спасибо за replies.Basically Я пытаюсь передать метод в Exception обработчика обработчика, которая использует обработку исключений для корпоративной библиотеки 5. Я пытаюсь передать в него какой-либо метод, и теперь мне нужно создать столько методов, сколько у меня уже есть, просто используйте его. –
да, только что упомянул вас :) – Diego