2010-10-19 18 views
9

मेरे पास कोड का एक टुकड़ा है जिसे मेरे रिपोजिटरी द्वारा सहेजा जा रहा है जब एक इकाई की जांच करने की आवश्यकता है। मैं इस जांच करने के लिए बचाने के लिए पर एक NHibernate इंटरसेप्टर है, लेकिन जब मैं कोड GetGenericTypeDefinition फ़ंक्शन को कॉल त्रुटि के साथ विफल:GetGenericTypeDefinition क्यों विफल हो जाता है?

protected override object PerformSaveOrUpdate(SaveOrUpdateEvent evt) 
{ 
    if (evt.Entity.GetType().GetGenericTypeDefinition() == typeof(IChild<>)) 
    { 
     var parent = (evt.Entity as IChild<Entity>).Parent; 
     if (parent != null) 
     { 
      parent.UpdateCacheCounters(); 
      evt.Session.Save(parent); 
     } 
    } 
} 

किसी भी मदद की बहुत सराहना की जाएगी:

[InvalidOperationException: Operation is not valid due to the current state of the object.] System.RuntimeType.GetGenericTypeDefinition() +7525641

कोड यह है।

+1

क्या आप देख सकते हैं कि evt.Entity.GetType() स्वयं पहले से ही विफल हो गया है या नहीं? यह जानने में मदद करेगा कि इस उदाहरण में वास्तव में कौन सी फ़ंक्शन कॉल विफल हो जाती है। अपवाद GetGenericTypeDefinition() से लौटाए गए अपवाद की तरह नहीं दिखता है। –

+0

यह evt.Entity.GetType() – Richard

उत्तर

12
Type type = evt.Entity.GetType(); 
if(
    type.IsGenericType && 
    type.GetGenericTypeDefinition() == typeof(IChild<>) 
) 

इसे आजमाएं। http://msdn.microsoft.com/en-us/library/system.type.getgenerictypedefinition.aspx के अनुसार:

InvalidOperationException: The current type is not a generic type. That is, IsGenericType returns false.

+0

धन्यवाद प्राप्त करने में विफल नहीं है। अब स्पष्ट है कि आपने मुझे दिखाया है लेकिन इसे देख नहीं रहा था। मदद की सराहना करें। – Richard

संबंधित मुद्दे