public object Get(Type itemType)
        {
            object item;
            var    elementType = itemType.GetCompatibleArrayItemType();

            if (elementType != null)
            {
                item = GetArray(itemType, elementType);
            }
            else if (itemType.IsGenericType &&
                     ListTypes.Contains(itemType.GetGenericTypeDefinition()))
            {
                item = GetList(itemType);
            }
            else
            {
                item = _items.Where(itemType.IsInstanceOfType).FirstOrDefault();
                if (item == null && _parentScope != null)
                {
                    item = _parentScope.Get(itemType);
                }
            }
            if (item == null && _clear.Any(itemType.IsAssignableFrom))
            {
                return(Null);
            }
            return(item);
        }
        public bool Contains(Type itemType)
        {
            if (_clear.Any(itemType.IsAssignableFrom))
            {
                return(true);
            }
            var elementType = itemType.GetCompatibleArrayItemType();

            if (elementType != null)
            {
                itemType = elementType;
            }
            else if (itemType.IsGenericType &&
                     ListTypes.Contains(itemType.GetGenericTypeDefinition()))
            {
                itemType = itemType.GetGenericArguments()[0];
            }
            return(_items.Any(itemType.IsInstanceOfType) ||
                   ((_parentScope != null) && _parentScope.Contains(itemType)));
        }