【问题标题】:How can I populate a NameValueCollection via a parameter in a shared method?如何通过共享方法中的参数填充 NameValueCollection?
【发布时间】:2013-04-10 17:32:04
【问题描述】:

我有一个代码段:

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;
}

什么是最有效和简单的方法?

【问题讨论】:

  • 当前在Mock&lt;HttpRequestBase&gt;GetRequestMock(){}Nethod 中运行代码时会发生什么
  • @DJKRAZE 现在没有这种方法了。
  • 你的意思是你的问题中没有这样的方法。我很困惑

标签: c# c#-4.0 query-string argument-passing namevaluecollection


【解决方案1】:

一种方法是使用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" } } );

【讨论】:

  • 这不会编译。应该是 KeyValuePair 吗?
  • @GilliVilla,是的,我面前没有编译器。我会更新答案。
  • 出现错误“无法将源类型对象转换为目标类型字符串。
  • Dictionary 代替 Dictionary 的任何原因?
猜你喜欢
  • 1970-01-01
  • 2020-07-05
  • 2017-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
  • 2019-06-19
相关资源
最近更新 更多