2014-01-21 48 views

回答

0
var listA = new List<YourType1>(); 
var listB = new List<YourType2>(); 

foreach (var elementA in listA) 
{ 
    if (listB.Any(elementB => elementA.Date_Debut == elementB.Date_Debut && 
           elementA.Date_Fin== elementB.Date_Fin && 
           elementA.NombreJours == elementB.NombreJours)) 
    { 
     /// elementA and element b is equal 
    } 
} 

如果你不想把一個條件,即長,比你可以重寫你的類Equals方法。然後,只需使用該Equals方法來比較您的對象。

+0

Thanks M Tolga,檢查整個兩個列表是否有相同的數據? – ucef

+0

認爲它是這樣的,它遍歷列表A,對於列表A中的每個元素,它將查看列表B,如果任何元素具有與該語句爲真的那些共享屬性相同的值,並且現在您在if子句中,否則它只是查找列表A中的下一個元素。但是我必須說,如果您要在這些列表之間進行進一步的列表操作,那麼@Simon Belanger的答案會更有意義。 –

1

你可以通過簡單的方式或困難的方式做到這一點。困難的方法是使用反射來拉動具有相同名稱和類型的屬性並比較它們的值。這並不難說,但它涉及更多,更密集。您也可以使用這兩個類來手動輸入比較結果。它可以工作,但如果你認爲你可能有更多的類共享這些屬性,它就不可重用。

或者你可以共享一個接口。

public interface ISharedProperty 
{ 
    DateTime Date_Debut {get;set;} 
    DateTime Date_Fin {get;set;} 
    int NombreJours {get;set;} 
} 

然後有一個IEqualityComparer<ISharedProperty>或擴展方法(或兩者)

public class SharedPropertyEqualityComparer : IEqualityComparer<ISharedProperty> 
{ 
    public bool Equals(ISharedProperty x, ISharedProperty y) 
    { 
     // Add some logic to check for x and y null value 
     return x.Date_Debut == y.Date_Debut && 
       x.Date_Fin == y.Date_Fin && 
       x.NombreJours == y.NombreJours; 
    } 

    public int GetHashCode(ISharedProperty x) 
    { 
     // Left for you to implement 
    } 
} 

您可以使用相等比較器在一些集合或創建一個以檢查是否相等。你可以使用擴展方法來幫助你。

public static bool EqualsTo(this ISharedProperty x, ISharedProperty y) 
{ 
    return new SharedPropertyEqualityComparer().Equals(x, y); 
} 

// And use your extension method. Class1 and Class2 
// implements ISharedProperty here 
Class1 one = /* some value */; 
Class2 two = /* some value */; 

one.EqualsTo(two); 
相關問題