Тонкости синтаксиса C#. Приведение типов

Узнай цену своей работы

Формулировка задачи:

Привет всем. Ну никак я не могу привыкнуть к этому C#. Постоянно какие-то ошибки там, где они не должны быть. Вообщем есть словарь private SortedDictionary<int, Delegate> events;, мне нужно вызвать делегат по определенному ключу. Пишу:
public void Invoke<T>( string eventName, T param1 )
{
    int hash = eventName.GetHashCode();
    Delegate d = null;
    if( events.TryGetValue( hash, out d ) )
    {
        //(Action<T>)events[hash](param1); // Почему бл... так не работает
        Action<T> act = d as Action<T>; // А так работает
        act( param1 );
    }
}
Что за бред вообще? Почему приведение в одном случае работает, а в другом нет. Я уже честно задолбался... P.S. Да и кстати, можно что-нибудь придумать с тем, чтобы мне не писать +100500 методов Invoke(...) для разного количества параметров делегата? Как в C++ к примеру:
template<typename... Args>
void Invoke( string eventName, Args... arg )
{
    ...
    events[hash]( std :: forward<Args>( arg )... );
}

Решение задачи: «Тонкости синтаксиса C#. Приведение типов»

textual
Листинг программы
(Action<T>)events[hash](param1); // Почему бл... так не работает

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.286 из 5