private static IEnumerable <TypeSig> BaseTypes(TypeSig type) { TypeDef typeDef = type.GetTypeDefOrRef().ResolveTypeDefThrow(); if (typeDef.BaseType == null) { yield break; } TypeSig baseType = type; do { var genericArgs = baseType.IsGenericInstanceType ? ((GenericInstSig)baseType).GenericArguments : null; baseType = GenericArgumentResolver.Resolve(typeDef.BaseType.ToTypeSig(), genericArgs, null); yield return(baseType); typeDef = typeDef.BaseType.ResolveTypeDefThrow(); } while (typeDef.BaseType != null); }