-event-只能出现在+ =或 - =的左侧 [英] -event- can only appear on the left hand side of += or -=
问题描述
add
和删除
访问器。 但是,我收到一条错误,指出:
ItemsProcessed只能出现在+ =或 - = $ c的左侧$ c>
当我尝试打电话给他们,即使在同一个班级。
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屋!