Вы можете использовать анонимные методы или лямбды, как это:
delegate void ProcessDelegate<T>(T param);
.
.
public static void Process<T>(ProcessDelegate<T> processDelegate)
{
using (var esb = ExchangeService.GetExchangeServiceBinding())
{
var contactFolder = FolderService.GetPublicFolder(esb,
Properties.Settings.Default.ExchangePublicFolderName);
processDelegate(contactFolder);
}
}
, а затем вызвать метод, подобный этому
Process(contactFolder => MyMethod(esb, contactFolder));
Process(contactFolder => MyMethod(esb, contactFolder, contact));
Где MyMethod - фактический метод, который вы вызываете, поэтому вы содержите его в своем лямбда-выражении, а не в делегате. Думаешь, что-то подобное может сработать?