C# 查找触发了哪个事件

C# 查找触发了哪个事件,c#,events,event-handling,C#,Events,Event Handling,我正在尝试捕获触发的事件。我有两个事件指向同一个函数,CurrentLoan\u LogEntryEvent。在CurrentLoan\u LogEntryEvent中,如何确定实际触发的事件:LogEntryAdded或LogEntryChange 在下面,您可以找到我的代码示例。如果您对我的代码有任何疑问,请告诉我 CurrentLoan是一个Loan对象,它有两个事件 public MyApplication() { ThirdPartyDLL.LoanOpened += new

我正在尝试捕获触发的事件。我有两个事件指向同一个函数,
CurrentLoan\u LogEntryEvent
。在
CurrentLoan\u LogEntryEvent
中,如何确定实际触发的事件:
LogEntryAdded
LogEntryChange

在下面,您可以找到我的代码示例。如果您对我的代码有任何疑问,请告诉我

CurrentLoan
是一个
Loan
对象,它有两个事件

public MyApplication()
{
    ThirdPartyDLL.LoanOpened += new EventHandler(CurrentLoanOpened);
}

private void CurrentLoanOpened(object sender, EventArgs e) 
{
    ThirdPartyDLL.CurrentLoan.LogEntryAdded += CurrentLoan_LogEntryEvent;
    ThirdPartyDLL.CurrentLoan.LogEntryChange += CurrentLoan_LogEntryEvent;
}

private void CurrentLoan_LogEntryEvent(object sender, LogEntryEventArgs e)
{
    // When LogEntry was Added or Changed.
    // How do I determine if LogEntryAdded or LogEntryChange was fired?
}

如果您想区分两个事件,那么没有必要为多个事件附加一个方法。给他们不同的处理方法

private void CurrentLoanOpened(object sender, EventArgs e) 
{
    ThirdPartyDLL.CurrentLoan.LogEntryAdded += CurrentLoan_LogEntryAdded;
    ThirdPartyDLL.CurrentLoan.LogEntryChange += CurrentLoan_LogEntryChange;
}

private void CurrentLoan_LogEntryAdded(object sender, LogEntryEventArgs e)
{
    //LogEntryAdded fired
    YourOptionalCommonMethodIfAny();
}

private void CurrentLoan_LogEntryChange(object sender, LogEntryEventArgs e)
{
    //LogEntryChange fired
    YourOptionalCommonMethodIfAny();
}
当您不关心事件的起源地,但总是希望在处理程序中执行相同的操作时,通常会为多个事件附加单个处理程序

如果要执行一些公共逻辑,可以在处理程序内部调用它

private void CurrentLoanOpened(object sender, EventArgs e) 
{
    ThirdPartyDLL.CurrentLoan.LogEntryAdded += CurrentLoan_LogEntryAdded;
    ThirdPartyDLL.CurrentLoan.LogEntryChange += CurrentLoan_LogEntryChange;
}

private void CurrentLoan_LogEntryAdded(object sender, LogEntryEventArgs e)
{
    //LogEntryAdded fired
    YourOptionalCommonMethodIfAny();
}

private void CurrentLoan_LogEntryChange(object sender, LogEntryEventArgs e)
{
    //LogEntryChange fired
    YourOptionalCommonMethodIfAny();
}

你为什么不干脆这样做:

private void CurrentLoanOpened(object sender, EventArgs e) 
{
    ThirdPartyDLL.CurrentLoan.LogEntryAdded += CurrentLoan_LogEntryAddedEvent;
    ThirdPartyDLL.CurrentLoan.LogEntryChange += CurrentLoan_LogEntryChangeEvent;
}

private void CurrentLoan_LogEntryAddedEvent(object sender, LogEntryEventArgs e)
{
    // First do what you must do specifically for added events
    CurrentLoan_LogEntry(e);
}


private void CurrentLoan_LogEntryChangeEvent(object sender, LogEntryEventArgs e)
{
    // First do what you must do specifically for changed events
    CurrentLoan_LogEntry(e);
}
将一个处理程序绑定到多个事件,然后弄清楚在该处理程序中要做什么,这只会使事情过于复杂


始终保持您的代码尽可能简单易懂并进行更改。

我很确定这是一个副本,但我必须寻找它。最简单的选择是将subscribe与lambda表达式一起使用,该表达式调用公共方法,并传递适当的值。但是,您确定
LogEntryEventArgs
不包含您需要的信息吗?