2016-03-22 1 views
0

Я пытался сделать это:Можно ли использовать метод в качестве первого параметра для метода расширения?

public static EventHandler ToEventHandler(this Action callback) 
{...} 

для некоторого синтаксического сахара, когда я хочу, чтобы пройти простой метод, как void x() к способу, который набранный для EventHandler.

Но когда я пытаюсь назвать это так:

SomeMethod(x.ToEventHandler()); 

Я получаю ошибку компиляции:

x() is a 'method', which is not valid in the given context 

Поскольку методы являются гражданами первого класса в .NET, я не могу понять, почему это не должно быть возможным. Почему это не так, и есть ли другой способ выполнить то, что я пытаюсь сделать?

+0

проверить эту ссылку http://stackoverflow.com/questions/2082615/pass-method-as-parameter-using-c-sharp – rashfmnb

+0

Вы попробовали перевести его на «Action»? Это группа методов, пока компилятор не знает иначе. –

ответ

0

Вы не можете этого сделать, потому что x - это метод, и компилятор не будет волшебным образом превращать метод по его идентификатору в делегат при использовании методов расширения (я считаю, что он должен это сделать действительно ...).

Что вам нужно это: SomeMethod(new Action(x).ToEventHandler());

В другой стороны, EventHandler имеет два входных параметра в то время как вы ожидаете использовать Action (делегат ... без параметров). Я подозреваю, что вы пытаетесь это сделать:

EventHandler handler = (sender, e) => callback(); 

... и затем, если вы идете по этому маршруту, все в порядке.

Смежные вопросы