我试图找到一个不同的List<Author>
给定一个List<BlogPost>
,每个BlogPost
都有一个Author
属性。我Distinct()
在泛型中找到了扩展方法,我正在尝试使用它。首先,让我解释一下我的循环以及我想在哪里使用它,然后我将解释我的类以及我遇到问题的地方。
尝试在这里使用 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()
?