Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NET中操作查询字符串_C#_.net_Linux_Mono_Query String - Fatal编程技术网

C# 在.NET中操作查询字符串

C# 在.NET中操作查询字符串,c#,.net,linux,mono,query-string,C#,.net,Linux,Mono,Query String,我在StackOverflow上看到了多个示例和答案,说明这是创建查询字符串以进行操作的推荐方法 NameValueCollection test = HttpUtility.ParseQueryString(String.Empty); test.Add("hello", "world"); Console.WriteLine(test.ToString()); 但它的回报是 System.Collections.Specialized.NameValueCollection 发生什么事了

我在StackOverflow上看到了多个示例和答案,说明这是创建查询字符串以进行操作的推荐方法

NameValueCollection test = HttpUtility.ParseQueryString(String.Empty);
test.Add("hello", "world");
Console.WriteLine(test.ToString());
但它的回报是

System.Collections.Specialized.NameValueCollection
发生什么事了?要测试的简单.NET4控制台应用程序(也尝试了早期的框架)。如果我不给它输入一个空字符串,它就会开始工作,但奇怪的是,有这么多的帖子建议将此作为解决方案。将其包装在try/catch语句中,以查看是否发生了任何奇怪的情况,不会抛出异常。我真的应该给它一个随机字符串“a=b”,然后将其从NameValueCollection中删除以获得可用的HttpValueCollection吗

我的最终目标是将其与UriBuilder一起使用,从中获取查询属性并将其提供给ParseQueryString。然而,有时可能没有查询字符串,UriBuilder.query将返回一个空字符串…因此出现了这个问题

编辑:如果有人感到困惑,我打算让它打印出与集合等价的查询字符串。因此,如果我要为该集合添加另一个值

test.Add("other", "value");
ToString()方法的结果应为

"hello=world&other=value"
编辑HI DAVE 我的要求?为什么它不起作用。。。

您的代码错误,要打印测试内容,您应该执行以下操作:

foreach(string s in test.AllKeys)
{
  Console.WriteLine("{0}-{1}", s, test[s]);
}
编辑:我不明白你的意思,Nicholi,看这张图片,我得到了正确的类
HttpValueCollection
也从parse方法中的空字符串开始,不添加hello键,请查看我的test.Add被注释掉了,并且所有键都是空的

因此,正如您在问题中提到的,我的
test.ToString()
返回的是空的而不是


你还想要/需要/要求/要求什么?;-)

您的代码错误,要打印测试内容,您应该执行以下操作:

foreach(string s in test.AllKeys)
{
  Console.WriteLine("{0}-{1}", s, test[s]);
}
编辑:我不明白你的意思,Nicholi,看这张图片,我得到了正确的类
HttpValueCollection
也从parse方法中的空字符串开始,不添加hello键,请查看我的test.Add被注释掉了,并且所有键都是空的

因此,正如您在问题中提到的,我的
test.ToString()
返回的是空的而不是


你还想要/需要/要求/要求什么?;-)

显然,这是Mono中一个由来已久的bug(我在问题中忘了提到这个!!)。 我使用的是Mono2.10.5和MonoDevelop 2.6。 微软的System.Web似乎没有问题


显然,这是Mono中一个由来已久的bug(在我的问题中我忘了提到它!!)。 我使用的是Mono2.10.5和MonoDevelop 2.6。 微软的System.Web似乎没有问题



您能否详细说明为什么要打印
System.Collections.Specialized.NameValueCollection
?你说了该做什么,但没有说为什么要做。@Davide,你似乎把ParseQueryString的返回值当作一个普通的旧NameValueCollection。这是不正确的,它实际上返回一个HttpValueCollection(派生自NameValueCollection),该集合重写ToString方法以返回。。。查询字符串。所以它应该打印出“hello=world”。如果我向集合中添加另一个值,它将是“hello=world&other=value”。你知道。。。类似于查询字符串。据我所知,这就是HttpUtility.ParseQueryString()方法的全部目的。否则我会自己做一个NameValueCollection来做这件事。Nicholi如果你说的是真的,为什么op在做问题中最初提到的字符串时会得到System.Collections.Specialized.NameValueCollection?我是op,我不知道。这就是为什么它如此令人困惑。如果为ParseQueryString()提供除空字符串以外的任何内容,它都可以工作。但是有很多答案都给出了一个具体的答案。我并没有一个初始的querystring值,这就是为什么在构造中简单地添加一个querystring值似乎是多余的,但随后立即将其删除。您能否详细说明为什么会打印
System.Collections.Specialized.NameValueCollection
?你说了该做什么,但没有说为什么要做。@Davide,你似乎把ParseQueryString的返回值当作一个普通的旧NameValueCollection。这是不正确的,它实际上返回一个HttpValueCollection(派生自NameValueCollection),该集合重写ToString方法以返回。。。查询字符串。所以它应该打印出“hello=world”。如果我向集合中添加另一个值,它将是“hello=world&other=value”。你知道。。。类似于查询字符串。据我所知,这就是HttpUtility.ParseQueryString()方法的全部目的。否则我会自己做一个NameValueCollection来做这件事。Nicholi如果你说的是真的,为什么op在做问题中最初提到的字符串时会得到System.Collections.Specialized.NameValueCollection?我是op,我不知道。这就是为什么它如此令人困惑。如果为ParseQueryString()提供除空字符串以外的任何内容,它都可以工作。但是有很多答案都给出了一个具体的答案。我一开始并没有一个初始的querystring值,这就是为什么在构造中简单地添加一个querystring值,然后立即删除它似乎是多余的。您使用的是哪个版本的.NET?这对我来说很好。我从问题中提取了您的确切代码,它产生了您想要的结果。如果我没有调用
Add
,那么当我调用
ToString()
尝试了所有.NET版本:1.1、2、3、3.5和4时,我会得到一个空字符串。不过,我是在Mono(linux)上运行的。刚刚找到了一个Windows测试环境,果然它可以工作了。一定是Mono系统中的一个漏洞。Web:(哇,很高兴知道。祝你好运!Nicholi你是个好人,我爱你