繁体   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