代码之家  ›  专栏  ›  技术社区  ›  Diego Mijelshon

确定.NET类型是否是动态的(使用Reflection.Emit创建)

  •  2
  • Diego Mijelshon  · 技术社区  · 16 年前

    而.NET4框架提供了 Assembly.IsDynamic

    用例很简单:出于日志记录的目的,我想确定可能由动态代理包装的实体的基础类型名 没有 有任何提到NHibernate或Castle(他们知道代理)

    CatProxYadaYada ,但我对 Cat .

    最简单的方法是什么?我在想这个骨架:

    var type = obj.GetType();
    while (IsProxy_Dynamic_Whatever(obj))
      type = type.BaseType;
    return type;
    
    1 回复  |  直到 16 年前
        1
  •  3
  •   Aaronaught    16 年前

    如果程序集是使用 Emit ,那你呢 应该 通过检查类型的程序集是否为 AssemblyBuilder

    static Type GetNonEmittedType(Type t)
    {
        if (t.Assembly is AssemblyBuilder)
            return GetNonEmittedType(t.BaseType);
        return t;
    }
    

    .