为什么GetGenericTypeDefinition失败?

时间:2010-10-19 14:49:13

标签: c# nhibernate generics

我有一段代码需要在我的存储库保存时检查实体。我在保存时有一个NHibernate拦截器来检查这个但是当我调用GetGenericTypeDefinition函数时代码失败并出现错误:

  

[InvalidOperationException:由于对象的当前状态,操作无效。]      System.RuntimeType.GetGenericTypeDefinition()+ 7525641

代码就是这样:

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);
        }
    }
}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:13)

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

试试这个。根据{{​​3}}:

  

InvalidOperationException:当前   type不是泛型类型。那是,   IsGenericType返回false。