![](/img/trans.png)
[英]CS1503: Argument 2: Cannot convert from 'System.Action[*,*,*] to System.Action[]' C# 2022
[英]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.