如果两个集合具有相同的键值对,NameValueCollection Equals方法是否会进行比较?

ran*_*jez 3 .net c#

如果不是,确定两个NameValueCollections对象是否相等的最佳方法是什么.

我正在使用它来确定解析为namevaluecollection的两个查询字符串是否具有相同的键和值,而不管顺序如何.

Mik*_*nry 7

等于似乎没有你想要的.它似乎检查引用相等,而不是它们是等价的.

应该使用以下方法(使用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]);
}
Run Code Online (Sandbox Code Playgroud)

注意:如果订单很重要,可以删除OrderBy语句.如果每个键有多个值,并且无论顺序如何都需要检查值是否相等,那么最后一行可以更改为:

        && nvc1.AllKeys
               .All(key => nvc1.GetValues(key)
                               .OrderBy(val => val)
                               .SequenceEqual(nvc2.GetValues(key)
                                                  .OrderBy(val => val)));
Run Code Online (Sandbox Code Playgroud)