移除C#中的Lambda事件處理程序
在C#中,Lambda表達式提供了一種簡潔的方式來定義簡單的事件處理程序。例如,使用Lambda表達式訂閱點擊事件非常簡單:
<code class="language-csharp">button.Click += (s, e) => MessageBox.Show("Woho");</code>
但是,如何隨後取消訂閱此事件?
使用委託取消訂閱
C#規範指出,Lambda表達式和匿名委託並不總是產生相同的委託。因此,為了確保可靠地取消訂閱,您可以明確追蹤使用的委託實例:
<code class="language-csharp">EventHandler handler = (s, e) => MessageBox.Show("Woho"); button.Click += handler; ... button.Click -= handler;</code>
使用獨立方法
如果您不想使用委託,可以為事件處理程序定義一個單獨的方法:
<code class="language-csharp">public void ShowWoho(object sender, EventArgs e) { MessageBox.Show("Woho"); } ... button.Click += ShowWoho; ... button.Click -= ShowWoho;</code>
自移除Lambda處理程序
如果您希望使用Lambda表達式建立自移除的事件處理程序,可以在Lambda表達式中引用委託。但是,您必須先將變數賦值為null:
<code class="language-csharp">EventHandler handler = null; handler = (sender, args) => { button.Click -= handler; // 取消订阅 // 在此处添加您的单次执行代码 }; button.Click += handler;</code>
使用委託類別進行封裝
可以將自移除功能封裝到委託類別中,但這可能由於事件的抽象性質而更加複雜:
<code class="language-csharp">button.Click += Delegates.AutoUnsubscribe<EventHandler>((sender, args) => { // 此处的单次执行代码 }, handler => button.Click -= handler);</code>
以上是如何在 C# 中取消訂閱 Lambda 事件處理程序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!