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 回答