尝试创建通用事件处理程序提升程序时出错

时间:2012-09-28 21:08:45

标签: asp.net events generics event-handling

我有一组具有相同签名的事件,因此我正在尝试创建一个通用的提升方法,以供所有人使用。

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'

1 个答案:

答案 0 :(得分:4)

将通用类型约束where添加到您的签名中:

protected virtual void RaiseEvent<T>(EventHandler<T> eventToRaise, T eventArgs) 
    where T : EventArgs