我試圖比較暫時的對象圖到NHibernate持久對象圖。不幸的是,我的代碼打破了IList<T>
類型的屬性。以下代碼適用於List<T>
的實例,因爲List<T>
實現了IList<T>
和IList
。不幸的是,NHibernate的PersistentGenericBag只實現了IList<T>
。檢索NHibernate.Collections.Generic.PersistentGenericBag作爲IList <T>使用反射
IList list1 = (IList)prop1.GetValue(object1, null);
IList list2 = (IList)prop2.GetValue(object2, null);
如果任object1或對象2是PersistentGenericBag,我得到一個錯誤,如:
System.Reflection.TargetInvocationException : Exception has been thrown
by the target of an invocation.
----> System.InvalidCastException : Unable to cast object of type
'NHibernate.Collection.Generic.PersistentGenericBag`1[MyNamespace.MyClass]'
to type 'System.Collections.Generic.List`1[MyNamespace.MyClass]'.
是否有使用反射來檢索PersistentGenericBag實例作爲一個IList <牛逼>一種可靠的方式?
我曾希望流行的Compare .NET Objects類會有所幫助,但它失敗,具有完全相同的錯誤。
編輯:以下所有答案都是正確的。問題在於有問題的IList<T>
屬性上的吸氣劑試圖將其轉換爲List<T>
,這顯然無法對PersistentGenericBag進行。所以,我的錯是因爲這個被誤導的問題。
比較項目可能存在的問題是,它不會深入到對象中,直到找到IList實現。 – 2010-02-09 02:10:15
錯誤表示您正在嘗試投射到列表(具體),* not * IList (interface) –
2010-02-09 02:15:14
PersistentGenericBag * does *實現IList和IList ,請參閱http://www.surcombe.com/nhibernate -1.2/api/html/T_NHibernate_Collection_Generic_PersistentGenericBag_1.htm –
2010-02-09 02:17:46