如果不是,那么确定两个 NameValueCollections 对象是否相等的最佳方法是什么。
我正在使用它来确定解析为 namevaluecollection 的两个查询字符串是否具有相同的键和值,而不管顺序如何。
Equals 似乎没有做你想做的事。它似乎检查引用相等,而不是它们是等价的。
以下方法应该有效(使用 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)));
我建议创建一个辅助方法或类似的方法来手动比较集合的键/值,以便您可以确定它们是否符合您的需要。
请记住,有很多变量取决于您的具体情况 - 如果集合具有相同的内容(键和值),但顺序不同,它们是否相等?如果内容相同(值相等)但没有引用相等,那么集合是否相等,或者它们必须是所有键和值的相同实例?等等。
因此,可能没有一个适合所有框架内置的解决方案 - 您需要编写一些代码来将两个集合与确定相等性所需的标准进行比较。