DOBON.NET DOBON.NETプログラミング掲示板過去ログ

List<T>.Add時のイベント

環境/言語:[C#2.0]
分類:[.NET]

いつも参考にさせて頂いております。

自作クラスを作成しているのですが
List<T>型のプロパティにAddした時に起こるイベントの
実装の仕方が判らなくて困っています

以下のコードでは上手く動きませんでした。

private List<string> _hoge

public List<string> hoge
{
get
{
return _hoge;
}
set
{
_hoge = value;
OnHogeChange(_hoge);
}

ステップ実行で調べていると
setアクセサは通らずにgetアクセサしか通っていないようなのですが……。

ご教授の程よろしくお願いいたします
> 自作クラスを作成しているのですが
> List<T>型のプロパティにAddした時に起こるイベントの
> 実装の仕方が判らなくて困っています
無理です。List<T> はそう言う余計な動作を省いてパフォーマンスを追求したプリミティブなコレクションです。
2.0 ってことは ObservableCollection<T> も無いですから、Collection<String> から派生したクラスを作成し、InsertItem や RemoveItem メソッドをオーバーライドしてイベントを発生させることになるでしょう。

> ステップ実行で調べていると
> setアクセサは通らずにgetアクセサしか通っていないようなのですが……。
Add の呼び出しは x.hoge.Add("a") って形になりますよね。これを分解すると、
List<string> temp = x.hoge;
temp.Add("a");
になります。x は hoge を取得するだけで、設定はしません。
// その後に明示的に x.hoge = temp; って書くと hoge の set アクセサが呼ばれるわけです。
Hongliang 様

回答ありがとうございました。
出来ないのですか。残念です。

ご提示頂いた、「Collection<String> から派生したクラスを作成」する方法をとるか
定期的にCOUNTを見に行く力業か。のどちらかにしようと思います

ありがとうございました
解決済み!
自作クラスを作成しているとの事ですので
(1)_hoge.Addを呼ぶメソッドを実装(AddHogeなど)
(2)AddHoge内でイベントを発生させる
(3)_hogeへの追加は_hoge.Addは直接呼ばないで、AddHogeを通して呼ぶようにします。

というのが良いと思います。
  • 題名: Re[3]: List<T>.Add時のイベント
  • 著者: ぱいら
  • 日時: 2010/07/14 12:47:54
  • ID: 27082
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
shu 様

ご返答ありがとうございます。
確かにその方法なら簡単に実装できそうですね。
その方法で行こうと思います。

ありがとうございました
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板