オブジェクトのリスト内の特定のプロパティを検証して一意であることを確認するユースケースがあります。基本的な設定は下のコードで見ることができます。リスト内の.Addメソッドのオーバーライド
class Program {
static void Main(string[] args) {
Directory myDirectory = new Directory("Interaction Design");
myDirectory.Books.Add(new Book("978-0-262-64037-4", "The Design of Everyday Things")); //Should be added
myDirectory.Books.Add(new Book("978-0-262-13474-3", "Designing Interactions")); //Should be added
myDirectory.Books.Add(new Book("978-0-262-13474-3", "Whoops, I slipped up")); //Should NOT be added
}
}
public class Directory {
public Directory(string name) {
Name = name;
}
public string Name { get; set; }
public List<Book> Books { get; set; } = new List<Book>();
}
public class Book {
public Book(string isbn, string title) {
Isbn = isbn;
Title = title;
}
public string Title { get; set; }
public string Isbn { get; set; }
}
ここで、ISBN番号が一意でない場合は、List of Booksに新しいブックを追加すると例外がスローされます。
リストの.Addメソッドを拡張し、その検証を追加したいと思いますが、実際にどのように行うかはわかりません。
私は似たようなことを見ましたが、DirectoryはListから継承していて、この場合は有効な解決策のようには見えません。
おそらく私の一般的なアプローチは後方ですか?
アドバイスをしてください。
https://stackoverflow.com/q/21692193/34397 – SLaks
このリンクを参照してください[どのようにリストのC#でのメソッドの追加?](https://stackoverflow.com/questions/580202/how- do-i-override-listts-add-method-in-c) –
本を非公開にします。それをIEnumerableゲッターで公開し、次に検証を行い、それをプライベートリストに追加したり、削除したりするメソッドを追加して削除しますか? – Dave