2014-01-06 60 views
1

如何比較一個列表中的對象?我重載它比較兩個字符串操作==C#遍歷一個列表並比較對象

public static bool operator ==(User one, User two) 
{ 
    return one.Email == two.Email; 
} 

,我應該去通過beetween他們比較列表。我已經想出了一個可以完成這項工作的解決方案,但我希望是否有更好的方法來使用LINQ或lambda表達式。

foreach (User u in up) 
{ 
    foreach (User u2 in up) 
    { 
     if (ReferenceEquals(u, u2)) continue; 
     if (u == u2) Console.WriteLine("Users {0} and {1} have the same mail.", u.ToString(), u2.ToString()); 
    } 
} 
+4

重載操作符幾乎不是一個好主意。尤其是在這種情況下,我會說。在你的'User'類中添加一個'Equals()'方法。 [看到這個StackOverflow問答](http://stackoverflow.com/questions/3869601/c-sharp-equals-referenceequals-and-operator) – crush

+1

不要忘記重寫'GetHashCode()' –

+0

@crush這是一個只是爲了瞭解操作員的重載而從學校鍛鍊身體。 – jonjohnson

回答

9

您可以使用分組沒有超載任何運營商(這是壞主意,我認爲):

var userGroups = up.GroupBy(u => u.Email).Where(g => g.Count() > 1); 

foreach(var group in userGroups) 
{ 
    Console.WriteLine("Following users have email {0}", group.Key); 

    foreach(var user in group) 
     Console.WriteLine(user); 
} 

查詢很簡單 - 這組的用戶通過電子郵件,並選擇組,其中超過一個用戶多個(即那些用戶具有相同的電子郵件)。

+1

謝謝你的工作很好。 – jonjohnson