我有一个委托,它需要很多参数,如下所示:
public delegate void MyDelegate(float thereAre, int lotsOf, string parametersIn, int thisDelegate);
public MyDelegate theDelegateInstance;
这很烦人,因为 Visual Studio 2010 没有任何类型的自动完成功能来帮助方法匹配委托签名。我基本上希望能够编写一个方法,该方法只接受委托的一些(或不接受)参数,而忽略其他参数,因为它无论如何都不使用它们。
theDelegateInstance += delegate()
{
Debug.Log("theDelegateInstance was called");
};
或者
theDelegateInstance += delegate(float thereAre, int lotsOf)
{
if(thereAre > lotsOf) Debug.Log("thereAre is way too high");
};
我发现我可以让一个方法接受一个委托,返回一个 MyDelegate,像这样调用它:
public delegate void VoidMethod();
public static MyDelegate ConvertToMyDelegate(VoidMethod method)
{
return delegate(float thereAre, int lotsOf, string parametersIn, int thisDelegate)
{
method();
};
}
但这需要我为每个不同的转换声明一个静态方法。
我刚刚发现我可以在没有任何参数的情况下执行我的第一个示例来达到预期的结果:
theDelegateInstance += delegate//Notice that there are no brackets here.
{
Debug.Log("theDelegateInstance was called");
};
但这仅适用于不带参数的内联方法。如果我想使用像第二个示例那样的参数之一,我需要拥有所有这些参数。