无法将类型 'System.EventHandler<xxxx>' 隐式转换为 xxxx已完成事件处理程序



我正在尝试在 C# 中进行一些智能事件处理,但我被一条错误消息卡住了:

无法将类型"System.EventHandler"隐式转换为 xxxxCompleteEventHandler

我有一段代码看起来像这样:

_ServiceAgentArt.Test((s,e) => _List = e.ListOfDTOArt, new DTOArt { Gruppe_id = 1700 });

在 ServiceAgentArt 类中的测试方法中,我有以下代码:

public delegate void getArterCompletedEventHandler(getArterCompletedEventArgs e);
public class getArterCompletedEventArgs : EventArgs
{
    public List<DTOArt> ListOfDTOArt { get; set; }
}
sealed class ServiceAgentArt : ServiceAgentBase
{
    public event getArterCompletedEventHandler EventGetArterCompleted;
    public void Test(EventHandler<getArterCompletedEventArgs> e, DTOArt _DTOArt)
    {
        EventGetArterCompleted += e;
        this.GetFromWEBAPI(string.Format("/apiart/getarter?id={0}", _DTOArt.Gruppe_id));
    }
    protected override void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
        if (EventGetArterCompleted != null)
            EventGetArterCompleted(new getArterCompletedEventArgs { ListOfDTOArt = e.Result.DecodeJSONFromStream<List<DTOArt>>() });
    }
}

但是.Net不喜欢代码行EventGetArterCompleted += e;,我完全理解它试图告诉我的,eventargs不能强制转换为事件处理程序。

我肯定在这里缺少一些东西,有没有办法将事件处理程序 e 添加到委托 EventGetArterDone ????

提前感谢,周末快乐:-)

托马斯, 哥本哈根, 丹麦

比较两个签名时:

public delegate void EventHandler<TEventArgs>(Object sender, TEventArgs e);
public delegate void getArterCompletedEventHandler(getArterCompletedEventArgs e);

你可以看到唯一真正的区别(与你的TEventArgs)是一个有sender,另一个没有。 假设您确实想使用这两种单独的委托类型,您可以通过传入 null sender 来执行此操作以使其工作。

EventGetArterCompleted += ea => e(null, ea);

或者,如果您的ServiceAgentArt实例应该是发送方:

EventGetArterCompleted += ea => e(this, ea);

仅使用 EventHandler<getArterCompletedEventArgs> 并删除委托类型可能更有意义。

您的事件显然不是 EventHandler 类型,而是您定义的自定义委托。重新定义事件以使用 EventHandler或者使方法的参数 getArterCompletedEventHandle。

在 C# 中,任何委托只能强制转换为委托或多播委托类型,因为它们是任何其他委托的隐式基,就像对象是任何类型的隐式基一样。

相关内容

  • 没有找到相关文章

最新更新