希望它是可能的: 我有一个这样的委托:适应非参数委托2个PARAMS使用lambda表达式
delegate bool X();
我有例如10个符合此签名的方法,但需要2个参数。我怎么能为这一个使用相同的代表呢?我不太了解lambda表达式,但认为这是可能的。
希望它是可能的: 我有一个这样的委托:适应非参数委托2个PARAMS使用lambda表达式
delegate bool X();
我有例如10个符合此签名的方法,但需要2个参数。我怎么能为这一个使用相同的代表呢?我不太了解lambda表达式,但认为这是可能的。
当然你可以,你只需要提供参数给你想要使用的函数。你不能只调用一个没有任何需要参数的函数。
delegate bool ParameterlessToBool(); // AKA: Func<bool>
delegate bool TwoParameterToBool(object a, object b); // AKA: Func<object, object, bool>
TwoParameterToBool objectsEqual = (a, b) => a.Equals(b);
object argument1 = 1;
object argument2 = 2;
ParameterlessToBool isEqual =() => objectsEqual(argument1, argument2);
bool result = isEqual(); // false
首先,我宣布两位代表在本例中使用,ParameterlessToBool
和TwoParameterToBool
。它们分别相当于框架代表Func<bool>
和Func<object, object, bool>
。你不需要这样做,只是这样我才能在这个例子中使用。
我使用两参数lambda来初始化TwoParameterToBool
类型的objectsEqual
变量。它在两个参数上调用Equals()
并返回结果。然后我初始化了需要能够调用这个新函数的两个参数。然后使用一个零参数λ来初始化类型的变量ParameterlessToBool
。它使用前面定义的两个参数调用双参数函数并返回结果。然后调用函数来显示它是如何使用的。
你为什么不简单地使用oob代表?
Action<T>
Funct<Tresult>
Funct<Tin, Tresult>
Funct<Tin1, Tin2, Tresult>
例如,下面的代码可能会回答你的问题(如果我理解正确的话):
public void MethodWithNoArgNoReturn()
{
}
public int MethodWithNoArgWithReturn()
{
return 42;
}
public void MethodWith1ArgNoReturn(int i)
{ }
public int MethodWith2ArgsWithReturn(string s1, string s2)
{
return 42;
}
void test()
{
var a1 = new Action(MethodWithNoArgNoReturn);
a1();
var f1 = new Func<int>(MethodWithNoArgWithReturn);
var i1 = f1();
var a2 = new Action<int>(MethodWith1ArgNoReturn);
a2(43);
var f2 = new Func<string, string, int>(MethodWith2ArgsWithReturn);
var i2 = f2("test", "test");
}
你的意思是说,当你调用`X()`时,你想让它运行`Y(g,k)`? – 2011-02-07 08:45:23
我不明白你的问题。你想让你的委托接受一个需要2个参数的方法吗?或者你希望你的无参数委托作为接受带有2个参数的方法的参数? – 2011-02-07 08:45:49