私のアプリケーションでは、enumプロパティを持つオブジェクトのリストがあります。クラスをもっと使いやすくするために、enumプロパティに基づいて、これらのオブジェクトの特定のサブジェクトを返すリストを追加することにしました。他のリストプロパティのサブセットを返しますが、変更可能なリストプロパティ
私はこのサブセットにオブジェクトを追加すると、メインリストを更新しないという問題があります。
これは可能ですか?
public class foo
{
public int Id { get; set; }
public string Description { get; set; }
public List<bar> bars { get; set; }
//list of only bars of barType one
public List<bar_one> bar_ones
{
get
{
return (this.bars.Where(x => x.barType == barType.one)).ToList().Cast<bar_one>().ToList();
}
}
public foo()
{
this.bars = new List<bar>();
}
}
public class bar
{
public bar() { }
public bar(barType bt) {
this.barType = bt;
}
public int Id { get; set; }
public string Description { get; set; }
public barType barType { get; set; }
}
public class bar_one : bar
{
public bar_one() : base(barType.one) { }
}
public enum barType
{
one,
two,
three
}
public static void Main()
{
foo f = new foo();
f.bars.Add(new bar { Id = 1, Description = "b1", barType = barType.one });
f.bars.Add(new bar { Id = 2, Description = "b2", barType = barType.two });
//this does not break, but the amount of objects in f.bars remain the same.
f.bar_ones.Add(new bar_one { Id= 3, Description="b1_2" });
}
は、あなたが本当にbar_ones' 'にバーを追加できるようにする必要がありますか?代わりに 'bar'プロパティにそれらを追加するだけでいいのですか? –
本当にこの振る舞いが必要な場合は、バーリストをラップし、そこから特定のバータイプをフィルタリングするカスタムコレクションタイプを作成する必要があると思います。また、内部メソッドにAddメソッドを委譲します。 –
@AndreasZita、私は(それは以前のデザインの一部だった)が、この方法はきれいで使いやすいと思った。 –