我知道我可以声明具有默认常量参数如代表:C#代表与不同的可选参数的方法
delegate void MyDelegate(int x, int y = 5);
,然后与签名匹配的任何方法,任何地方调用它。
好吧,我已经有了一个声明如下方式方法等:
public Something FirstMethod(float val = 10, int skip = 0){ ... return sth; }
public Something SecondMethod(float val = 20, int skip = 0){ ... return sth; }
public Something ThirdMethod(float val = 5, int skip = 0){ ... return sth; }
...这个例子不胜枚举一路下来,反正它们都有签名结构。这里的要点是,它们都有浮点参数,默认是不同的。
然后,我想创建一个委托,它会指向这些方法之一:
delegate Something ProblematicDelegateType(<<WHAT WILL GO HERE>>);
ProblematicDelegateType myFunc;
if(someValue == someParameter){
myFunc = FirstMethod;
}else if(...){
myFunc = SecondMethod;
}else...
...
}
myFunc();
myFunc(skip:100);
我希望能够调用myFunc
两参或与skip
参数。在这部分代码中,第一个参数val
未被使用。 (他们在其他地方使用)。
什么会去代表的参数列表?我想保留该方法的默认val
参数,不管它是什么。
那一个能工作,但有没有更好,更正式/模块化的方法呢?我正在寻找一些我不添加'skip => Method(skip:skip);'并且能够'不知何故'直接调用myFunc指向的方法,而无需包装另一个lambda。当然,如果这是可能的:) –
@canpoyrazoğlu:这是不可能的。如果你想使用一些默认参数,那么方法'FirstMethod','SecondMethod'等必须被调用_explicitly_,因为只有在那些调用位置是编译器插入的默认参数。所以唯一的办法就是围绕他们环绕 – JBSnorro
好的,我会继续打包。但仍然不知道为什么它不能完成,因为签名是'硬编码'的,没有泛型或任何类型的任何类型的变体,并且如果编译器知道参数的确切顺序和类型,逻辑上应该是一种方式进入那个。但我仍然会使用包装。 –