在C#中,可以創建更高階的函數,即。函數g
將函數作爲參數。假設我想創建一個給定函數f
的函數,並返回擴展其功能的另一個函數。 如何爲返回的增強方法定義參數名稱?的動機是,我正在使用更高階的方法,其中一些產生新的方法..這些可能很難使用,因爲沒有參數名稱等附加到他們。如何在C#中爲高階函數定義參數名稱#
示出了如何g
f
和分別可在C#中定義的一個例子:
我定義的方法擴展可以EXTENS方法採取T
作爲參數並返回一個S
。
static class M
{
public static Func< T, S> Extend(Func< T, S> functionToWrap)
{
return (someT) =>
{
...
var result = functionToWrap(someT);
...
return result;
};
}
}
然後我們可以在不改變方法的情況下在我們的類上擴展一個方法。
class Calc2
{
public Func< int, int> Calc;
public Calc2()
{
Calc = M.Extend< int, int>(CalcPriv);
}
private int CalcPriv(int positiveNumber)
{
if(positiveNumber < 0) throw new Exception(...);
Console.WriteLine("calc " + i);
return i++;
}
}
唉,參數名稱positiveNumber
不再可用,因爲唯一可用的信息是Func<int, int> Calc
。那是當我通過輸入new Calc2().Calc(-1)
來使用擴展方法時,我從IDE中得不到任何幫助,實際上我的論點是錯誤的。
如果我們可以定義一個delegate
並將其轉換爲此值將會很好,但這是不可能的。
有什麼建議嗎?
你需要知道參數名稱?您在何處/如何在您發佈的代碼中使用它? – sepp2k 2010-10-28 21:15:03
有沒有這樣做是不同的,只是創建一個繼承M和重寫Extend的類? – 2010-10-28 21:23:19
以上是一個例子,而不是問題。問題是關於能夠使用記錄參數輸入的更高階方法創建方法 – 2010-10-28 21:25:56