0

我有一個代碼段:如何通過共享方法中的參數填充NameValueCollection?

var requestMock = new Mock<HttpRequestBase>(); 
var queryString = new NameValueCollection(); 
queryString["abc"] = "123"; 
queryString["qwe"] = "456"; 
queryString["yui"] = "678"; 
... 
requestMock.SetupGet(rqst => rqst.QueryString).Returns(queryString); 

現在,我想有寫成的方法上述段:

var requestMock = GetRequestMock(???); 

我打算髮送的查詢字符串可以是鍵/值任何東西。 而k/v對的數量也可以是任何東西。

public Mock<HttpRequestBase> GetRequestMock(???) 
{ 
var requestMock = new Mock<HttpRequestBase>(); 
.... 
requestMock.SetupGet(rqst => rqst.QueryString).Returns(queryString); 
return requestMock; 
} 

什麼是最好的方法來做到這一點有效和簡單?

+0

目前會發生什麼事,當你運行在'模擬代碼 GetRequestMock(){}'Nethod – MethodMan 2013-04-10 17:34:30

+0

@DJKRAZE現在沒有這種方法。 – GilliVilla 2013-04-10 17:38:08

+0

你是什麼意思,沒有這樣的方法,你有它寫在你的問題..我很困惑 – MethodMan 2013-04-10 17:42:19

回答

2

一種方法是使用Dictionary

public Mock<HttpRequestBase> GetRequestMock(Dictionary<string, object> queryParms) 
{ 
    var queryString = new NameValueCollection(); 
    foreach (KeyValuePair<string, object> kvp in queryParms) 
    { 
     queryString[kvp.Key] = Convert.ToString(kvp.Value); 
    } 

    ... 
} 

,然後你可以這樣調用:

GetRequestMock(new Dictionary<string, object> { { "abc", "123" }, { "qwe", "456" } }); 
+0

這不會編譯。應該是KeyValuePair ? – GilliVilla 2013-04-10 18:00:21

+0

@GilliVilla,是的,我沒有編譯器在我面前。我會更新答案。 – 2013-04-10 18:01:33

+0

出現錯誤「無法將源類型對象轉換爲目標類型字符串 – GilliVilla 2013-04-10 18:25:19