2017-02-22 38 views
0

我最近想出如何從方法返回方法/功能,例如:你如何返回函數求<Func鍵<string, int>,int>的

public static Func<string, int> Parse() { 
    return x => Int32.Parse(x); 
} 

出於純粹的好奇,我想知道有多遠,我可以走。是否有可能以某種方式返回Func<Func<string, int>, int>

public static Func<Func<string, int>, int> PlusSomething(this Func<string, int> parser) { 
    return x => x + parser; //Obviously doesn't work 
} 



我能夠做到最接近的事是

public static Func<string, int, int> PlusSomething(this Func<string, int> parser) { 
    return (x, y) => parser(x) + y; 
} 
+1

您有一個錯誤信息或者這樣的嗎?爲什麼'this'擴展方法是前綴? –

+6

你試圖達到的目標有點不清楚;你能解釋一下更多的理想結果嗎? – Codor

+0

雖然這個問題已經得到了解答,但我試圖讓它更清楚一些: 我不想讓一個方法接受一個值並返回一個值,而是希望它取一個值並返回一個函數(取而代之然後將計算該值)。這是前三行代碼所做的。 然後我問自己是否有可能創建一個方法,該方法將函數作爲參數,並且還會再次返回此函數(不進行任何計算),以及新方法實際應該執行的操作。 –

回答

1

既然不是很清楚你想實現什麼,我會做一些猜測工作。

A Func<Func<string, int>, int>是一個接受函數並返回一個int的函數。

一種可能性是,您想要返回一個函數,該函數使用函數f,將其應用於字符串並返回int。在這種情況下,你必須指定你想要應用功能f的地方。或者當您生成功能

public static Func<Func<string, int>, int> PlusSomething(string s) { 
    return f => f(s); 
} 

或者當您應用功能

public static Func<Func<string, int>, int, int> PlusSomething() { 
    return f, s => f(s); 
} 

看你的第二個例子,在我看來(我可能是錯的),你實際上要返回一個函數接受一個int並返回一個函數。

public static Func<int, Func<string, int>> PlusSomething(Func<string, int> parser) { 
    return x => (y => x + parser(y)); 
} 

這將允許像

var gen = PlusSomething(parser); 
var parsePlus4 = gen(4); 
int x = parsePlus4("8"); // x == 12 
+1

非常感謝!我實際上試圖重新整理我的問題,只是不知道如何。 'return x =>(y => x + parser(y));'正是我想要的。 –

0

要回答這個問題,因爲它是說 - 是的,它可能有一個函數描述的簽名如下。

public static 
Func<Func<string,int>,int> 
PlusSomething(this Func<string, int> parser) 
{ 
    return x => 1; 
} 

然而,目前還不清楚期望的結果是什麼以及輸入如何與期望的輸出相關;在語法上它是可能的。

相關問題