protected internal GroupGenericTypeCore(Type[] types, Dictionary <Types, ClrTypeCore> cache)
        {
            if (cache == null)
            {
                cache = new Dictionary <Types, ClrTypeCore>();
            }
            _BindedGenericCache = cache;

            _GroupTypes = types;
            if (types != null)
            {
                foreach (var type in types)
                {
                    if (type != null && type.IsGenericType() && type.ContainsGenericParameters())
                    {
                        var cnt  = type.GetGenericArguments().Length;
                        var core = ClrGenericTypeCore.GetGenericTypeCore(type, cache);
                        _GenericTypeCores[cnt] = core;
                    }
                }
            }
        }
        protected internal ClrTypeCoreWithGeneric(Type ntype, Type[] gtypes, Dictionary <Types, ClrTypeCore> cache)
        {
            List <Type> types = new List <Type>();

            if (ntype != null)
            {
                _NormalCore = ClrTypeCore.GetTypeCore(ntype);
                types.Add(ntype);
            }
            if (gtypes != null && gtypes.Length > 0)
            {
                if (gtypes.Length > 1)
                {
                    _GenericCore = new GroupGenericTypeCore(gtypes, cache);
                }
                else
                {
                    _GenericCore = ClrGenericTypeCore.GetGenericTypeCore(gtypes[0], cache);
                }
                types.AddRange(gtypes);
            }
            _GroupTypes = types.ToArray();
        }