Я пытаюсь найти отличный List<Author>
дал List<BlogPost>
где каждый BlogPost
имеет Author
свойство. Я нашел метод расширения Distinct()
в дженериках, и я пытаюсь его использовать. Во-первых, позвольте мне объяснить мой цикл и где я хочу его использовать, тогда я объясню свои занятия и где у меня проблемы.Аннотация реализация IEqualityComparer или переопределить компаратор по умолчанию использовать 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();
}
Исходя из того, что я read on MSDN, Distinct()
либо использует компаратор по умолчанию или сдавшим в компараторе. Я надеялся (я obviosuly не знаю, если это выполнимо), чтобы написать компаратор в одном месте и иметь возможность использовать его для всех моих классов, поскольку все они сравниваются по той же операции равенства (которая сравнивает свойство GUID
каждый класс).
Все мои классы наследуют от класса BasePage
:
public class BasePage : System.Web.UI.Page, IBaseTemplate, IEquatable<IBaseTemplate>, IEqualityComparer<IBaseTemplate>
public class Author : BasePage
public class BlogPost : BasePage
Мой равно метод, реализованный в BasePage
сравнивает GUID
свойство, которое является уникальным для каждого. Когда я звоню Distinct()
на Author
, он не работает. Есть ли способ, которым я могу обернуть сопоставитель в одном месте и всегда иметь возможность использовать его, а не писать что-то вроде class AuhorComparer : IEqualityComparer<Auhor>
, так как тогда мне нужно было написать одно и то же для каждого класса, каждый раз, когда я хочу использовать Distinct()
, Или Могу ли я переопределить сопоставления по умолчанию, так что мне не нужно ничего пропускать до Distinct()
?
Спасибо за предложение HashSet. Я внедрил ваши изменения, но я все равно получаю список того же размера. У меня есть список 3 сообщений, у двух есть один и тот же автор, у одного есть совершенно другой автор. Тем не менее, я получаю список из 3 авторов. – 2010-11-22 21:42:17