Я пытаюсь найти отличное List<Author>
с учетом List<BlogPost>
, где каждый BlogPost
имеет свойство Author
.Я нашел метод расширения Distinct()
в обобщениях и пытаюсь его использовать.Во-первых, позвольте мне объяснить мой цикл и где я хочу его использовать, затем я объясню мои классы и где у меня возникли проблемы.
Попытка использовать различные здесь
public List<Author> GetAuthors() {
List<BlogPost> posts = GetBlogPosts();
var authors = new List<Author>();
foreach (var bp in posts) {
authors.Add(bp.Author);
}
return authors.Distinct().ToList();
}
Исходя из того, что я прочитал в MSDN , Distinct()
использует компаратор по умолчанию или переданный в компаратор.Я надеялся (я, очевидно, не знаю, выполнимо ли это), написать компаратор в одном месте и иметь возможность использовать его для всех моих классов, поскольку все они сравниваются с помощью одной и той же операции равенства (которая сравнивает GUID
).свойство каждого класса).
Все мои классы наследуются от класса BasePage
:
public class BasePage : System.Web.UI.Page, IBaseTemplate, IEquatable<IBaseTemplate>, IEqualityComparer<IBaseTemplate>
public class Author : BasePage
public class BlogPost : BasePage
Мой метод equals, реализованный в BasePage
, сравнивает уникальное свойство GUID
для каждого.Когда я звоню Distinct()
на Author
, это не похоже на работу.Есть ли способ, которым я могу обернуть компаратор в одном месте и всегда иметь возможность использовать его вместо того, чтобы писать что-то вроде class AuhorComparer : IEqualityComparer<Auhor>
, так как тогда мне нужно было бы писать одно и то же для каждого класса, каждый раз, когда я хочуиспользуйте Distinct()
. Или можно ли как-то переопределить компаратор по умолчанию, чтобы мне ничего не приходилось передавать Distinct()
?