簡體   English   中英

將附加參數傳遞給System.Action,C#

[英]passing additional parameter to System.Action, C#

好吧,我在庫中有一個按鈕,如下所示:

    public class Button  {
       public event Action<UIButtonX> onClicked;
       //
       // when button clicked, on OnClicked method is called
       //
       protected virtual void OnClicked () {
            if (onClicked != null) onClicked (this);
       }
    }

當我想處理按鈕單擊時,我正在寫如下內容:

button.onClicked += delegate{
  //do something
}

要么

button.onClicked += HandleButtonClick;

void HandleButtonClick(UIButton obj){
}

現在我想將參數傳遞給匿名委托,例如

button.onClicked += delegate(UIButton obj, int id) {
 //do something with id
}

但是編譯器不允許這樣做。 如何解決這個問題?

謝謝。

從外觀上看,您需要執行以下操作:

public class Button
{
    public event Action<UIButtonX, int> onClicked;

    public int Id { get; set; }

    protected virtual void OnClicked ()
    {
        var e = this.onClicked;
        if (e != null)
        {
            e(this, this.Id);
        }
    }
}

然后可以添加您的處理程序:

button.onClicked += (button, id) => { /* code here */ }

我認為最好使用事件而不是操作,請考慮閱讀以下一些類似的問題: 事件Action <>與事件EventHandler <>C#Action / Delegate樣式問題

以下文章對於理解這種方法之間的差異非常有幫助: http : //blog.monstuff.com/archives/000040.html

希望對您有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM