繁体   English   中英

使用Distinct与自定义对象列表

[英]Use of Distinct with list of custom objects

如何使Distinct()方法使用自定义对象列表(在本例中为Href ),这是当前对象的样子:

public class Href : IComparable, IComparer<Href>
{
    public Uri URL { get; set; }
    public UrlType URLType { get; set; }

    public Href(Uri url, UrlType urltype)
    {
        URL = url;
        URLType = urltype;
    }


    #region IComparable Members

    public int CompareTo(object obj)
    {
        if (obj is Href)
        {
            return URL.ToString().CompareTo((obj as Href).URL.ToString());
        }
        else
            throw new ArgumentException("Wrong data type.");
    }

    #endregion

    #region IComparer<Href> Members

    int IComparer<Href>.Compare(Href x, Href y)
    {
        return string.Compare(x.URL.ToString(), y.URL.ToString());
    }

    #endregion
}

您需要重写EqualsGetHashCode

GetHashCode应为所有被认为相等的实例返回相同的值。

例如:

public override bool Equals(object obj) { 
    Href other = obj as Href;
    return other != null && URL.Equals(other.URL);
} 

public override int GetHashCode() { 
    return URL.GetHashCode();
} 

由于.Net的Uri类重写了GetHashCode,因此您只需返回URL的哈希码即可。

您可以获取aku比较器的副本(但要注意GetHashCode实现),然后写这样的东西

hrefList.Distinct(new Comparer<Href>((h1,h2)=>h1.URL==h2.URL))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM