如何定义一个函数,该函数需要另一个在c#中返回bool的函数?
为了澄清,这是我想用C ++做的事情:
void Execute(boost::function<int(void)> fctn)
{
if(fctn() != 0)
{
show_error();
}
}
int doSomething(int);
int doSomethingElse(int, string);
int main(int argc, char *argv[])
{
Execute(boost::bind(&doSomething, 12));
Execute(boost::bind(&doSomethingElse, 12, "Hello"));
}
在上面的示例中,Execute
功能组合使用bind
获得预期结果。
背景:
我有一堆函数,每个函数返回一个int但具有不同的参数计数,这些函数由相同的错误检查代码包围。我想避免的巨大代码重复...
答案 0 :(得分:1)
您可以使用Func实现所需目标。例如
void Execute(Func<bool> myFunc)
{
if(myFunc() == false)
{
// Show error
}
}
然后,您可以将Func定义为方法或lambda:
// Define a method
private bool MethodFunc() {}
// Pass in the method
Execute(MethodFunc)
// Pass in the Lambda
Execute(() => { return true; });
您现在不需要传递参数,因为您现在可以从调用者的范围访问它们:
Execute(() => { return myBool; });
Execute(() => { return String.IsNullOrEmpty(myStr); });
答案 1 :(得分:1)
使用我的解决方案,你可以执行任何函数,任何输入参数,任何返回,这是一个非常通用的实现
示例:强>
public T YourMethod<T>(Func<T> functionParam)
{
return functionParam.Invoke();
}
public bool YourFunction(string foo, string bar, int intTest)
{
return true;
}
像此一样调用指定返回:
YourMethod<bool>(() => YourFunction("bar", "foo", 1));
或者像这样:
YourMethod(() => YourFunction("bar", "foo", 1));
答案 2 :(得分:0)
without argument do this
void Execute(Func<bool> fctn)
{
if(fctn() )
{
show_error();
}
}
with arguments you can do something like this:
void Execute<T>(Func<T[],bool> fctn)
{
var v = new T[4];
if(fctn(v) )
{
show_error();
}
}