想要在列表中添加唯一数组<>;

本文关键字:数组 lt gt 唯一 添加 列表 | 更新日期: 2023-09-27 18:26:38

我想在列表中添加唯一数组。下面是我迄今为止尝试过的代码。

但它不符合我的要求。

------全球类别----

    public class filesdetail
        {
            public string truckno { get; set; }
            public string deliveryno { get; set; }
        }

-----全局定义列表----

      public List<filesdetail> arrr_lst_truck_del;

-------事件中的代码-------

      arrr_lst_truck_del = new List<filesdetail>();
      for (int i = 0; i < temp.Length; i++)
                {
                    if (temp[i].Split(Convert.ToChar(9)).Length > 1)
                    { 
                        obj = new filesdetail();
                        obj.truckno = temo1;
                        obj.deliveryno = temp[i].Split(Convert.ToChar(9))[0].Trim(''n');
                        if (!arrr_lst_truck_del.Contains(obj))
                        {
                            arrr_lst_truck_del.Add(obj);
                        }                            
                    }
                }

想要在列表中添加唯一数组<>;

您需要覆盖filesdetail类上的Equals(object)方法,然后Contains可以使用该方法来检查两个filesdetail是否匹配。

默认的Equals方法只在对象完全相同的情况下返回true,因此如果这样做:

new filesdetail().Equals(new filesdetail())

这永远不会是真的。

下面是一个示例实现。实现IEquatable<T>是一个很好的实践,它表明您有一个健全的等式方法。我还实现了GetHashCode作为一个很好的衡量标准:

public class filesdetail : IEquatable<filesdetail>
{
    public string truckno { get; set; }
    public string deliveryno { get; set; }
    public bool Equals(filesdetail other)
    {
        return other != null &&
                Equals(truckno, other.truckno) &&
                Equals(deliveryno, other.deliveryno);
    }
    public override bool Equals(object obj)
    {
        return Equals(obj as filesdetail);
    }
    public override int GetHashCode()
    {
        var trucknoHash = truckno == null ? 0 : truckno.GetHashCode();
        var deliverynoHash = deliveryno == null ? 0 : deliveryno.GetHashCode();
        return (trucknoHash*397) ^ deliverynoHash;
    }
}

嗨,你可以尝试Distinct方法

    class Program
{
    static void Main(string[] args)
    {
        List<filesdetail> details = new List<filesdetail>();
        details.Add(new filesdetail() { truckno = "123", deliveryno = "abc" });
        details.Add(new filesdetail() { truckno = "123", deliveryno = "abc" });
        var a = details.Distinct(new filesdetailComparer<filesdetail>()).ToList();
    }
}
public class filesdetailComparer<T> : IEqualityComparer<T>
{
    public bool Equals(T x, T y)
    {
        var obj1 = x as filesdetail;
        var obj2 = y as filesdetail;
        if (obj1 != null && obj2 != null && string.Compare(obj1.deliveryno, obj2.deliveryno) == 0 && string.Compare(obj1.truckno, obj2.truckno) == 0)
            return true;
        else
            return false;
    }
    public int GetHashCode(T obj)
    {
        var obj1 = obj as filesdetail;
        //Check whether the object is null 
        if (Object.ReferenceEquals(obj1, null)) return 0;
        //Get hash code for the truckno field if it is not null. 
        int hashtruckno = obj1.truckno == null ? 0 : obj1.deliveryno.GetHashCode();
        //Get hash code for the deliveryno field. 
        int hashdeliveryno = obj1.deliveryno == null ? 0 : obj1.deliveryno.GetHashCode();
        //Calculate the hash deliveryno for the filesdetail. 
        return hashtruckno ^ hashdeliveryno;
    }
}
public class filesdetail
{
    public string truckno { get; set; }
    public string deliveryno { get; set; }
}