首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在NameValueCollection中使用foreach KeyValuePair?

在NameValueCollection中使用foreach KeyValuePair?
EN

Stack Overflow用户
提问于 2011-12-05 20:58:27
回答 8查看 89.3K关注 0票数 81

我有这样的代码:

NameValueCollection nv = HttpUtility.ParseQueryString(queryString);        
foreach (KeyValuePair<String,String> pr in nv) {
    //process KeyValuePair          
}

这段代码可以编译,但是当我尝试运行它时,我得到了一个InvalidCastException

为什么会这样呢?为什么我不能使用KeyValuePair遍历NameValueCollection,我应该使用什么?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-12-05 21:02:42

首先,NameValueCollection没有使用KeyValuePair<String,String>。此外,foreach仅公开密钥:

NameValueCollection nv = HttpUtility.ParseQueryString(queryString);        
foreach (string key in nv) {
    var value = nv[key];

}
票数 136
EN

Stack Overflow用户

发布于 2013-01-30 17:59:53

您不能直接这样做,但您可以创建一个扩展方法,如下所示:

public static IEnumerable<KeyValuePair<string, string>> AsKVP(
        this NameValueCollection source
)
{
    return source.AllKeys.SelectMany(
        source.GetValues,
        (k, v) => new KeyValuePair<string, string>(k, v));
}

然后您可以执行以下操作:

NameValueCollection nv = HttpUtility.ParseQueryString(queryString);
foreach (KeyValuePair<String,String> pr in nv.AsKVP()) {
    //process KeyValuePair          
}

注:灵感来自this。需要SelectMany来处理重复的密钥。

vb.net版本:

<Extension>
Public Function AsKVP(
        source As Specialized.NameValueCollection
) As IEnumerable(Of KeyValuePair(Of String, String))
    Dim result = source.AllKeys.SelectMany(
        AddressOf source.GetValues,
        Function(k, v) New KeyValuePair(Of String, String)(k, v))
    Return result
End Function
票数 13
EN

Stack Overflow用户

发布于 2012-07-06 04:33:18

为了便于将来参考,您还可以使用以下语法:

foreach(string key in Request.QueryString)
{
    var value = Request.QueryString[key];
}
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8385677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档