不使用LINQto對象的區(qū)別class Program{
static void Main(string[] args)
{
List<Book> books = new List<Book>
{
new Book
{
Name="C# in Depth",
Authors = new List<Author>
{
new Author
{
FirstName = "Jon", LastName="Skeet"
},
new Author
{
FirstName = "Jon", LastName="Skeet"
},
}
},
new Book
{
Name="LINQ in Action",
Authors = new List<Author>
{
new Author
{
FirstName = "Fabrice", LastName="Marguerie"
},
new Author
{
FirstName = "Steve", LastName="Eichert"
},
new Author
{
FirstName = "Jim", LastName="Wooley"
},
}
},
};
var temp = books.SelectMany(book => book.Authors).Distinct();
foreach (var author in temp)
{
Console.WriteLine(author.FirstName + " " + author.LastName);
}
Console.Read();
}}public class Book{
public string Name { get; set; }
public List<Author> Authors { get; set; }}public class Author{
public string FirstName { get; set; }
public string LastName { get; set; }
public override bool Equals(object obj)
{
return true;
//if (obj.GetType() != typeof(Author)) return false;
//else return ((Author)obj).FirstName == this.FirstName && ((Author)obj).FirstName == this.LastName;
}}這是基于“LINQ in Action”中的一個(gè)例子。清單4.16。這印了喬恩·斯基特兩次。為什么?我甚至在Author類中嘗試過重寫等于方法。仍然不同似乎不起作用。我遺漏了什么?
3 回答

蝴蝶刀刀
TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊
Distinct()
IEqualityComparer
Equals
GetHashCode
Author
public class AuthorEquals : IEqualityComparer<Author>{ public bool Equals(Author left, Author right) { if((object)left == null && (object)right == null) { return true; } if((object)left == null || (object)right == null) { return false; } return left.FirstName == right.FirstName && left.LastName == right.LastName; } public int GetHashCode(Author author) { return (author.FirstName + author.LastName).GetHashCode(); }}

吃雞游戲
TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
IEquatable
, Equals
GetHashCode
GroupBy
var temp = books.SelectMany(book => book.Authors) .GroupBy (y => y.FirstName + y.LastName ) .Select (y => y.First ());foreach (var author in temp){ Console.WriteLine(author.FirstName + " " + author.LastName);}
- 3 回答
- 0 關(guān)注
- 406 瀏覽
添加回答
舉報(bào)
0/150
提交
取消