NameValueCollection键没有值

时间:2017-10-12 18:19:53

标签: c# namevaluecollection

我有一个NameValueCollection变量queryDict

某些键没有值。但是,我想通过所有键,即使它们没有与之关联的值。

使用这个,如果value为空,我得到null而不是键名:

foreach (var parameter in queryDict)
{
  key = (string)parameter;
}

AllKeys产生所有结果。

但是我也得到null。查看queryDict的内容,我可以看到字符串中的值是......

那么如何在不需要创建算法的情况下访问所有密钥名称呢?

增加:

以下是使用鼠标悬停时queryDict的内容:

{AQB = 1&安培; NDH = 1&安培; CID&安培; oxygenid}

CID。循环中没有找到氧气和氧气

我这样填写:

string queryString = "AQB=1&ndh=1&cid.&oxygenid";
NameValueCollection queryDict = System.Web.HttpUtility.ParseQueryString(queryString);

4 个答案:

答案 0 :(得分:3)

NameValueCollection允许您使用相同的键添加多个值,但是如果添加具有空值的键,然后再次读取具有非空值的相同键,则第一个值(空值)为没有更多可用

让我们测试一些场景:

NameValueCollection coll = new NameValueCollection();
coll.Add("This", "Test");
coll.Add("That", "A value");
coll.Add("This", "Not a null");

foreach (string p in coll.AllKeys)
{
    Console.WriteLine("Key=" + p + ", Value=[" + (coll[p] ?? "null") + "]");
}

我们得到输出

Key=This, Value=[Test,Not a null]
Key=That, Value=[A value]

因此,对象已将两个添加的值合并到一个条目中,用逗号分隔这两个值。 现在让我们试试

coll.Add("This", null);
coll.Add("That", "A value");
coll.Add("This", "Not a null");

输出

Key=This, Value=[Not a null]
Key=That, Value=[A value]

没有第一次添加的痕迹。为什么会这样?仅仅因为合并值的Add方法的内部逻辑无法区分null的初始值和第一个add添加的null。所以它只是用“Not a null”字符串替换null值。

确实评论了最后一次添加

coll.Add("This", null);
coll.Add("That", "A value");
// coll.Add("This", "Not a null");

我们得到了

Key=This, Value=[null]
Key=That, Value=[A value]

答案 1 :(得分:0)

I would like to go through all keys你应该遍历键:

foreach (var parameter in queryDict.Keys)

答案 2 :(得分:0)

试试这个,看它是否有效。您可以使用NameValueCollection.AllKeys循环键,而不会返回任何重复项。

foreach (var parameter in queryDict.AllKeys) { key = parameter; }

答案 3 :(得分:0)

使用?? null-coalescing运算符。如果操作数不为null,则返回左侧操作数;否则它会返回右手操作数。