0

list.belowに一意の配列を追加したいのは、これまでに試したコードです。

しかし、それは私の要件に従って機能していません。

------グローバルクラス-----

    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);
                        }                            
                    }
                }
4

2 に答える 2

3

クラスのEquals(object)メソッドをオーバーライドする必要があります。これにより、2 つの が一致するかどうかを確認できます。filesdetailContainsfilesdetail

デフォルトのメソッドは、オブジェクトがまったく同じオブジェクトである場合に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;
    }
}
于 2013-08-07T05:13:33.577 に答える
0

こんにちは、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; }
}
于 2013-08-07T05:43:03.963 に答える