如果不是,确定两个NameValueCollections对象是否相等的最佳方法是什么。
我正在使用它来确定解析为namevaluecollection的两个查询字符串是否具有相同的键和值,而不管顺序如何。
答案 0 :(得分:6)
等于似乎没有你想要的。它似乎检查引用相等,而不是它们是等价的。
以下方法应该有效(使用System.Linq),尽管可能有更有效的方法:
public bool CompareNameValueCollections(NameValueCollection nvc1,
NameValueCollection nvc2)
{
return nvc1.AllKeys.OrderBy(key => key)
.SequenceEqual(nvc2.AllKeys.OrderBy(key => key))
&& nvc1.AllKeys.All(key => nvc1[key] == nvc2[key]);
}
注意:如果订单很重要,可以删除OrderBy语句。如果每个键有多个值,并且无论顺序如何都需要检查值是否相等,那么最后一行可以更改为:
&& nvc1.AllKeys
.All(key => nvc1.GetValues(key)
.OrderBy(val => val)
.SequenceEqual(nvc2.GetValues(key)
.OrderBy(val => val)));
答案 1 :(得分:1)
我建议创建一个辅助方法或类似的东西,手动比较集合的键/值,这样你就可以确定它们是否与你需要的相等。
请记住,有很多变量将取决于您的具体情况 - 如果集合具有相同的内容(键和值),但顺序不同,它们是否相等?如果内容相同(值相等),集合是否相等,但是没有引用相等,或者它们必须是所有键和值的相同实例?等
因此,框架中可能没有一个适合所有解决方案 - 您需要编写一些代码来比较两个集合与确定相等所需的标准。