Как преобразовать действие в определенный делегат с той же подписью?

class Test
{
    public delegate void FruitDelegate(Fruit f);

    public void Notify<T>(Action<T> del) where T : Fruit
    {
        FruitDelegate f = del; // Cannot implicitly convert type 'Action<T>' to 'FruitDelegate
    }
}

Fruit - пустой класс. У обоих делегатов одна и та же подпись.

Мне кажется, что ничего из этого не работает. Может быть, было бы полезно, если бы я объяснил, что я пытаюсь сделать (предоставьте некоторый контекст).

Я хочу создать класс, который имеет общий статический метод, который предоставляет тип и обратный вызов метода (как в приведенном выше примере).

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

public void SomeMethod()
{
    Test.Notify<Apple>(AppleHandler);
}

private void AppleHandler(Apple apple)
{

}

Вместо этого:

public void SomeMethod()
{
    Test.Notify<Apple>(AppleHandler);
}

private void AppleHandler(Fruit fruit)
{
    Apple apple = (Apple)fruit;
}

Возможно ли такое? Работали над этим несколько часов без особого успеха = /

6
задан Ryan Peschel 20 October 2011 в 02:22
поделиться