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

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

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

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

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

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

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут