internal IWrappedCollection CreateWrapper(object list)
        {
            if (list is IList && (CollectionItemType == null || !_isCollectionItemTypeNullableType))
            {
                return(new CollectionWrapper <object>((IList)list));
            }

            if (_genericWrapperType == null)
            {
                _genericWrapperType = ReflectionUtils.MakeGenericType(typeof(CollectionWrapper <>), CollectionItemType);

                ConstructorInfo genericWrapperConstructor = _genericWrapperType.GetConstructor(new[] { _genericCollectionDefinitionType });
#if !PocketPC
                _genericWrapperCreator = LateBoundDelegateFactory.CreateMethodHandler(genericWrapperConstructor);
#else
                _genericWrapperCreator = (target, args) => genericWrapperConstructor.Invoke(new[] { args[0] });
#endif
            }

            return((IWrappedCollection)_genericWrapperCreator(null, list));
        }
        internal IWrappedDictionary CreateWrapper(object dictionary)
        {
            if (dictionary is IDictionary)
            {
                return(new DictionaryWrapper <object, object>((IDictionary)dictionary));
            }

            if (_genericWrapperType == null)
            {
                _genericWrapperType = ReflectionUtils.MakeGenericType(typeof(DictionaryWrapper <,>), DictionaryKeyType, DictionaryValueType);

                ConstructorInfo genericWrapperConstructor = _genericWrapperType.GetConstructor(new[] { _genericCollectionDefinitionType });
#if !PocketPC
                _genericWrapperCreator = LateBoundDelegateFactory.CreateMethodHandler(genericWrapperConstructor);
#else
                _genericWrapperCreator = (target, args) => genericWrapperConstructor.Invoke(new[] { args[0] });
#endif
            }

            return((IWrappedDictionary)_genericWrapperCreator(null, dictionary));
        }