1

同じシグネチャのイベントのセットがあるので、それらすべてに使用される汎用のレイズメソッドを作成しようとしています。

protected virtual void RaiseEvent<T>(EventHandler<T> eventToRaise, T eventArgs)
{
    if (eventToRaise != null)
    {
        try
        {
            eventToRaise(this, eventArgs);
        }
        catch (Exception ex)
        {
            throw new Exception("a problem accured while raising event : " + ex.Message);
        }
    }
}

しかし、コンパイルしようとするとこのエラーが発生します:

The type 'T' cannot be used as type parameter 'TEventArgs' in the generic type or method 'System.EventHandler<TEventArgs>'. There is no boxing conversion or type parameter conversion from 'T' to 'System.EventArgs'
4

1 に答える 1

4

シグネチャにジェネリック型制約whereを追加します。

protected virtual void RaiseEvent<T>(EventHandler<T> eventToRaise, T eventArgs) 
    where T : EventArgs
于 2012-09-28T21:16:58.723 に答える