2014-04-25 101 views
1

我有以下情形:傳遞參數的委託方法

private void RequestInfo(string a, string b) 
{ 
    var c = a+b; 
    library.FetchInfo(c, OnInfoReceived); 
} 

private void OnInfoReceived(CustomParameterType object) 
{ 
    dictionaryOfInfo.Add(c, object); 
} 

正如你看到的,我的問題是,我無法訪問變量「c」作爲參數FetchInfo函數傳遞迴調。

+0

什麼是'library.FetchInfo'的方法簽名? – ChrFin

+0

FetchInfo是一個DLL庫的方法...我無能爲力去改變它。假設它接收到一個字符串和一個回調方法。 –

回答

2

在C#3.0和更高版本,可以使用lambda expression這樣的:

private void RequestInfo(string a, string b) 
{ 
    var c = a+b; 
    library.FetchInfo(c, obj => dictionaryOfInfo.Add(c, obj)); 
} 
+0

如果我想要使用收到的對象並創建另一個異步請求,並在該回調方法中使用添加到字典,該怎麼辦?就像這樣:初始方法 - >請求 - >回調 - >請求 - >回調 - >添加到字典。 –

+1

當然,如果你的方法實際上做的不僅僅是'dictionaryOfInfo.Add',你可以把它作爲一個方法來接受'c'和'obj'作爲參數,並在lambda表達式中調用該方法。但是,如果您確實需要進行大量的異步調用,您可能需要考慮使用[async/await](http://msdn.microsoft.com/en-us/library/hh191443.aspx)模式。 –