我在用户控件中有一个 NameValueCollection
,它是这样初始化的:
private NameValueCollection _nameValues = HttpUtility.ParseQueryString(Request.QueryString.ToString());
当我调用 ToString()
时,它会生成一个正确的查询字符串,我可以将其用于更新的 url。
但是,当我像这样通过其构造函数复制 NameValueCollection
时:
var nameValues = new NameValueCollection(_nameValues);
然后尝试形成一个 url:
var newUrl = String.Concat(_rootPath + "?" + nameValues.ToString());
它输出这样的 url:
"http://www.domain.com?System.Collections.Specialized.NameValueCollection "
如何复制 NameValueCollection
以便 ToString()
方法输出所需的结果?
最佳答案
问题是您的代码中有两种实际类型。第一个是 System.Web.HttpValueCollection
,它覆盖了 ToString 方法以获得您期望的结果,第二个是 System.Collection.Specialized.NameValueCollection
,它没有覆盖 ToString。如果您确实需要使用 System.Collection.Specialized.NameValueCollection
,您可以做的是创建一个扩展方法。
public static string ToQueryString(this NameValueCollection collection)
{
var array = (from key in collection.AllKeys
from value in collection.GetValues(key)
select string.Format("{0}={1}", HttpUtility.UrlEncode(key), HttpUtility.UrlEncode(value))).ToArray();
return "?" + string.Join("&", array);
}
并使用它:
var newUrl = String.Concat(_rootPath,nameValues.ToQueryString());
关于c# - 复制的 NameValueCollection 的 ToString() 未输出所需的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19723931/