List<BlogPost>
という別個のList<Author>
を見つけようとしています。それぞれBlogPost
にAuthor
というプロパティがあります。私はジェネリックスでDistinct()
拡張メソッドを見つけました。私はそれを使用しようとしています。まず、私のループを説明してみましょう。どこで使用したいのですか?私のクラスとどこに問題があるのかを説明します。私はread on MSDN、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();
}
を明確な使用しようと
。私はのGUID
性質を比較した(1つのスポットで比較子を書き、それらはすべてがまったく同じ平等操作により比較するので、私のクラスのすべてのためにそれを使用できるようにする(これはなんとかであれば、私はobviosuly知らない)期待していました各クラス)。
私のクラスのすべてのBasePage
クラスから継承:
public class BasePage : System.Web.UI.Page, IBaseTemplate, IEquatable<IBaseTemplate>, IEqualityComparer<IBaseTemplate>
public class Author : BasePage
public class BlogPost : BasePage
私はBasePage
に実装された方法は、それぞれに固有のGUID
プロパティを比較し等しいです。私がAuthor
にDistinct()
を呼び出すと、うまくいかないようです。私は1つの場所で比較演算子をラップし、常に、むしろ私はその後、各クラスの同じことを記述する必要があると思いますので、class AuhorComparer : IEqualityComparer<Auhor>
ような何かを書くことよりも、私はDistinct()
を使用するたびにそれを使用することができる方法はあります。 デフォルトコンバーターを何とかオーバーライドできますので、Distinct()
に何も渡す必要はありませんか?
HashSetの提案に感謝します。私はあなたの変更を実装しましたが、私はまだ同じサイズのリストを取得します。私は記事の3つのリストを持っている、2つは同じ著者を持って、1つは全く異なる著者を持っています。私は3人の著者のリストを得る。 –
HashSetに同じ著者が含まれているという事実が、私のEqualsメソッドとGetHashCodeメソッドが正しく書かれていないことを複数回証明していますか? –
私の 'GetHashCode'メソッドが正しく書かれていないので、これがうまくいかないことを確認しました。今私はこのアプローチを 'HashSet'の働きで行っています。ありがとう! –