それぞれがプロパティを持っている場所を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()
、デフォルトの比較子または渡された比較子を使用します。私は(これが実行可能かどうかは明らかにわかりません)比較子を1つの場所に記述し、すべてのクラスでまったく同じ等値演算(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>
使用するたびにクラスごとに同じことを書く必要があるため、比較子を1か所にまとめて、常に使用できるようにする方法はありますかDistinct()
? または、デフォルトの比較子を何らかの方法でオーバーライドして、何も渡す必要がないようにすることはできますDistinct()
か?