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