我实现了一个事件,每次类中的值更改时都会触发该事件。
我还有一个类,其中包含这些项目的集合,我想订阅这些项目的事件。我试图在这样的属性的设置器中这样做:

public virtual ISet<ItemType> items
{
    get
 {
  return this._items;
 }

 set
 {
  this._items = value;
  foreach (var item in this._items)
  {
   item.PropertyChanged += this.Item_ThePropertyChanged;
  }
 }
}


但是,一旦从“ for”部分到达“ in this._items”,我将收到“非法访问加载集合”错误。
这是堆栈跟踪:


  在NHibernate.Collection.AbstractPersistentCollection.Initialize(布尔写法)\ r \ n在NHibernate.Collection.AbstractPersistentCollection.Read()\ r \ n在NHibernate.Collection.Generic.PersistentGenericSet`1.System.Collections.Generic.IEnumerable.GetEnumerator ()\ r \ n在MyMethod


预先感谢您的任何帮助

最佳答案

显然,NHibernate在初始化属性时会阻止对集合的访问。将foreach循环更改为常规for循环是否有帮助?可能只有GetEnumerator()方法被阻止了:

for (var i = 0; i < _items.Count; i++)
{
  _items[i].PropertyChanged += Item_ThePropertyChanged;
}

关于c# - 在NHibernate设置其值之后,在集合项上设置事件处理程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2915914/

10-16 08:14