簡體   English   中英

我如何使用委托作為參數調用此函數

[英]how would i call this function with a delegate as a parameter

我有重復的代碼,我試圖重構為一個泛型函數,從一個對象列表(所有INamed列表)生成一個復選框列表。

第二個參數是一個委托,它將回調函數,但我無法弄清楚我將如何實際調用此方法。 使用此委托調用方法的最佳方法是什么? (我正在尋找一個可以調用Checkboxlist函數的代碼示例)

public delegate bool HasHandler(INamed named);

這是通用方法

static public string CheckboxList(IQueryable<INamed> allItems, HasHandler has, string name)
    {
        StringBuilder b = new StringBuilder();
        foreach (var item in allItems)
        {
            if (has(item))
            {
                b.Append("<input type='checkbox' class='checkboxes' name='" + name + "' value=" + item.Id + " checked />" + item.Name);
            }
            else
            {
                b.Append("<input type='checkbox' class='checkboxes' name='" + name + "' value=" + item.Id + " />" + item.Name);
            }
        }
        return b.ToString();
    }

你現在正在做:

if (has(item))  // This calls the delegate

這會調用方法中的委托。 你的語法是正確的,應該有效。


至於調用CheckboxList - 聽起來你需要定義委托。 這可以是將“INamed”作為參數的任何方法,並返回一個布爾值。 例如,如果你有:

private bool myHandler(INamed named)
{
    return true;
}

你可以這樣稱呼:

string result = CheckboxList(items, myHandler, "Foo");

或者,您可以在這里傳遞lambda:

string result = CheckboxList(items, named => { return (named.Foo > 3); }, "Foo");

很簡單的例子:

public delegate bool HasHandler(INamed named);

// delete method matching HasHandler declaration
bool MyHandler(INamed named) {
    return true;
}

// method that passes your implemented delegate method as a parameter
void MyOtherMethod() {
    MyMethod(null, (n) => MyHandler(n)); // using lambda
    MyMethod(null, MyHandler); // not using lambda
}

// method that uses your implemented delegate method
// this would be like your CheckboxList method
void MyMethod(INamed o, HasHandler handler) {
    handler(o);
}

請注意,標識符handler用作o (作為INamed對象)作為參數的函數。

編輯

調用CheckboxList方法的示例:

CheckboxList(myItems, (n) => MyHandler(n), "myName");
CheckBoxList(yourItems, x => x.SomeProperty == "foo", "yourName");

暫無
暫無

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

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