2013-08-07 36 views
0

我想在列表中添加唯一數組。下面是我迄今爲止試過的代碼。想要在列表中添加唯一數組<

但它沒有按照我的要求工作。

------全球一流-----

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

-----定義列表globaly -----

 public List<filesdetail> arrr_lst_truck_del; 

------ -code事件-------

 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); 
         }        
        } 
       } 
+0

如何「不按您的要求的工作」嗎?你有什麼要求?什麼是異常/錯誤? –

+0

@DaveZych:想要添加獨特的數組,儘管條件!包含()它允許我在列表中添加相同的數組.....代碼工作正常沒有錯誤或執行是在那裏。 – neerajMAX

+0

您是否聽說過.Distinct()方法可用於列表 –

回答

3

你需要重寫Equals(object)方法對你filesdetail類,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; 
    } 
} 
0

你好你可以試試鮮明方法

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