我知道我可以聲明具有默認常量參數如代表: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
好的,我會繼續打包。但仍然不知道爲什麼它不能完成,因爲簽名是'硬編碼'的,沒有泛型或任何類型的任何類型的變體,並且如果編譯器知道參數的確切順序和類型,邏輯上應該是一種方式進入那個。但我仍然會使用包裝。 –