Проблема в том, что вы используете Hashtable
, который имеет слабый тип. Компилятор видит группу методов (имя метода, который вы хотите преобразовать в делегат), но не знает, какой тип делегата вы имеете в виду.
Если вы хотите продолжать использовать Hashtable, вы можете сделать:
categoryHandler handler = Campaigns.post;
categories.Add("campaigns", handler);
или
categories.Add("campaigns", new categoryHandler(Campaigns.post));
В обоих случаях группа методов преобразуется в определенный тип делегата, так что все в порядке.
Тем не менее, лучшим решением является использование Dictionary<string, categoryHandler>
, во-первых, всегда используйте строго типизированные коллекции, где вы можете делать это разумно (что почти всегда). Для удобства, это должно быть CategoryHandler
btw - это имя типа. Аналогично post
должно быть Post
.
Затем, чтобы позвонить, вы должны использовать:
String category = "campaigns";
CategoryHandler handler;
if (categories.TryGetValue(category, out handler))
{
handler(someString);
}