2013-02-15 32 views
0

我很困惑,爲什麼我不能把它稱爲函數,我如何讓自己把它稱爲函數?在lambda中調用函數<string,object>

Error 1 'fn' is a 'variable' but is used like a 'method' 

來源

Func<List<object>, List<object>, Func<string, object>> test; 
test = (ls, fn) => fn(null); 
+1

什麼是'fn'的definiton? – 2013-02-15 21:31:02

+1

fn有類型列表 fsimonazzi 2013-02-15 21:31:19

+1

'fn'是一個'列表'。你的'test'返回一個'Func ' – juharr 2013-02-15 21:31:40

回答

11

我很困惑。

是的。讓我們不要混淆你。

這是怎麼回事?

Func<List<object>, List<object>, Func<string, object>> test; 
test = (ls, fn) => fn(null); 

這是說test是一個函數,它接受兩個列表,並從字符串返回功能對象。這些清單是lsfn。所以fn的類型是List<object>,這不是可以調用的東西。

也許你應該在這裏描述你要做的事情,因爲它從代碼中看不清楚。

它猜想免費獲贈List<object>Func<string, object>並返回List<object>

我不認爲這可能是正確的,因爲你要調用該功能並獲得List<object>回來,但一Func<string, object>返回object

也許你打算寫是

Func<List<object>, Func<string, List<object>>, List<object>> test; 
test = (ls, fn) => fn(null); 

現在的ls類型是List<object>fn類型爲Func<string, List<object>>。所以當fn被調用時,它將返回,如test所要求的那樣。

有意義嗎?

請記住,在Func<A, B, R>中,A和B是參數類型,R是返回類型。

+0

哦返回值是最後一個參數嗎?這是違反直覺的,因爲C#在params之前總是有返回類型 – BruteCode 2013-02-15 21:37:03

+1

由於'fn'返回'object'並且委託人假設返回類型是'List ',所以這仍然不會編譯。 – Servy 2013-02-15 21:37:07

+0

@BruteCode有趣的是,Eric說,如果有內存服務,Eric有關於該主題的博客文章。 – Servy 2013-02-15 21:37:30

3

你可能想下面

Func<List<object>, Func<string, List<object>>, List<object>> test; 

Func<List<object>, Func<string, object>, object> test; 

這個工作

test = (ls, fn) => fn(null); 
0

您可能需要類似:

static void Main(string[] args) 
    { 
     Func<List<object>, List<object>, Func<string, object>> test = Test; 

    } 

    private static Func<string, object> Test(List<object> objects, List<object> list) 
    { 
     throw new NotImplementedException(); 
    } 
0

我不知道你想要什麼,但這種編譯和作品:

public void SomeMethod() 
{ 
    Func<List<object>, List<object>, Func<string, object>> test = (a, b) => 
    { 
     a = b; 
     return AnotherMethod; 
    }; 
} 

public object AnotherMethod(string value) 
{ 
    return (object)value; 
} 
相關問題