-event-只能出现在+ =或 - =的左侧 [英] -event- can only appear on the left hand side of += or -=

查看:422
本文介绍了-event-只能出现在+ =或 - =的左侧的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个循环中的事件。我试图阻止相同的方法被添加到一个事件不止一次。我已经实现了 add 删除访问器。



但是,我收到一条错误,指出:



ItemsProcessed只能出现在+ =或 - =



当我尝试打电话给他们,即使在同一个班级。

 code> ItemsProcessed(这是新的EventArgs()); //生成错误

公共事件EventHandler ItemsProcessed
{
添加
{
ItemsProcessed - = value;
ItemsProcessed + = value;
}
删除
{
ItemsProcessed - = value;
}
}


解决方案

一个明确的事件,你需要提供你自己的后台存储 - 一个委托字段或类似于 EventHandlerList 的东西。当前代码是递归的。尝试:

 私人EventHandler itemsProcessed; 
public event EventHandler ItemsProcessed
{
add
{
itemsProcessed- = value;
itemsProcessed + = value;
}

删除
{
itemsProcessed- = value;
}
}

然后(并注意到我是一个>小谨慎的即将转向 null 边缘案例重新线程):

  var snapshot = itemsProcessed; 
if(snapshot!= null)snapshot(this,EventArgs.Empty);

随着最新的C#版本,可以简化:

  itemsProcessed?.Invoke(this,EventArgs.Empty); 


I have an event in a loop. I am trying to prevent the same method being added to an event more than once. I've implemented the add and remove accessors.

However, I get an error stating that:

ItemsProcessed can only appear on the left hand side of += or -=

When I try to call them, even within the same class.

ItemsProcessed(this, new EventArgs()); // Produces error

public event EventHandler ItemsProcessed
{
    add
    {
        ItemsProcessed -= value;
        ItemsProcessed += value;
    }
    remove
    {
        ItemsProcessed -= value;
    }
}

解决方案

With an explicit event, you need to provide your own backing store - either a delegate field or something like EventHandlerList. The current code is recursive. Try:

private EventHandler itemsProcessed;
public event EventHandler ItemsProcessed
{
    add
    {
        itemsProcessed-= value;
        itemsProcessed+= value;
    }

    remove
    {
        itemsProcessed-= value;
    }
}

Then (and noting I'm being a little cautious about the "about to turn null" edge-case re threading):

var snapshot = itemsProcessed;
if(snapshot != null) snapshot(this, EventArgs.Empty);

With more recent C# versions, this can be simplified:

itemsProcessed?.Invoke(this, EventArgs.Empty);

这篇关于-event-只能出现在+ =或 - =的左侧的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆