我有一个方法
protected void Item_Click(object sender, EventArgs e)
{ }
我想要其他代码来调用此方法。 (实际上并不需要sender
或e
)
类似的东西:
Item_Click(null, null)
但后来我记得我可以改用EventArgs.Empty
。
鼠标悬停在它上面显示:
等等......什么?
EventArgs.Empty代表一个事件?它不是。它应该代表空参数而不是事件。
就像string.empty
代表空字符串。
答案 0 :(得分:4)
这只是糟糕的文档,将一个词中的两个概念混为一谈。 latest documentation似乎小更好:
提供用于没有事件数据的事件的值。
麻烦在于“事件”有两个不同的含义:
例如,说:“订阅KeyPress
事件以接收与键盘相关的事件是不合理的。”
(“委托”一词同样糟糕,用于描述委托类型及其实例。)
这一切都很不幸,但请放心,你有正确的想法。
顺便说一句,如果你想调用方法 other 而不是引发事件,我可能会把它分成两个方法:
// This only exists to handle the event, delegating to the DoSomething method
private void HandleItemClicked(object sender, EventArgs e)
{
DoSomething();
}
// This can be called from other code, and should be named according to what it
// does.
private void DoSomething()
{
}
如果您手动订阅该活动,则甚至不需要额外的方法:
item.Click += delegate { DoSomething(); };
通过这种方式,您可以清楚地表明您的“真实”方法并不关心发送方或事件参数,并且在调用它时不需要提供“虚拟”值。