繁体   English   中英

用lambda表达式指定相等

[英]Specify equality with a lambda expression

我想比较2个收藏夹。 其中一个是List<string> ,另一个是List<Book> 本书有一个string类型的Isbn属性,我想写这样的东西:

List<string> isbnBooks= new List<string> {"978-1933988276", "978-0321146533", "3"};
List<Book> books = new List<Book>();

books.Add(new Book { Isbn="978-1933988276", Name="The Art of Unit Testing"});
books.Add(new Book { Isbn="978-0321146533", Name="TDD By Example"});
books.Add(new Book { Isbn="978-0321503626", Name="Growing Object-Oriented Software"});

// What I want to write
var intersectedBooks = books.Intersect(books, isbnBooks, (book, isbn) => book.Isbn == isbn));

我想在方法中指定相等性。 可能吗 ? 还是应该强制创建实现IEqualityComparer接口的BookComparer?

问候,

弗洛里安

Intersect根本不适用于其他集合类型。 在这种情况下,编写起来似乎更简单:

HashSet<string> isbns = new HashSet<string> isbnBooks();   
var intersectedBooks = books.Where(book => isbns.Contains(book.Isbn));

或者,您当然可以加入:

var knownBooks = from book in books
                 join isbn in isbnBooks on book.Isbn equals isbn
                 select book;

(这两种方法大致相同。)

或者,您可以始终这样做:

var intersectedBooks = books.Select(book=>book.Isbn).Intersect(isbnBooks);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM