Exemplo n.º 1
0
        /// <summary>
        /// 특정 수형의 기본값을 반환합니다. ValueType인 경우는 기본 생성자를 통해 값을 반환하고, ValueType이 아닌 경우에는 null을 반환합니다.
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        public static object GetTypeDefaultValue(this Type type)
        {
            if (type == null)
            {
                return(null);
            }

            if (IsDebugEnabled)
            {
                log.Debug("특정 수형[{0}]의 기본값을 구합니다...", type.FullName);
            }

            object result = null;

            if (type.IsValueType)
            {
                result = ActivatorTool.CreateInstance(type);
            }

            if (IsDebugEnabled)
            {
                log.Debug("특정 수형[{0}]의 기본값=[{1}] 입니다.", type.FullName, result ?? "null");
            }

            return(result);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Dictionary에 지정한 키에 해당하는 값을 찾아서, <paramref name="valuePropertySetter"/>로 값을 변경합니다.
        /// </summary>
        /// <typeparam name="TKey"></typeparam>
        /// <typeparam name="TValue"></typeparam>
        /// <param name="dictionary"></param>
        /// <param name="key"></param>
        /// <param name="valuePropertySetter"></param>
        /// <returns></returns>
        public static TValue SetValue <TKey, TValue>(this IDictionary <TKey, TValue> dictionary, TKey key,
                                                     Action <TValue> valuePropertySetter)
        {
#if !SILVERLIGHT
            return(SetValue(dictionary, key, k => ActivatorTool.CreateInstance <TValue>(), valuePropertySetter));
#else
            return(SetValue(dictionary, key, k => Activator.CreateInstance <TValue>(), valuePropertySetter));
#endif
        }
Exemplo n.º 3
0
        /// <summary>
        /// 개방된 Generic 수형을 <paramref name="innerTypes"/>의 Closed Generic 수형으로 만들고, 인스턴스를 생성해서 반환합니다.
        /// </summary>
        /// <param name="genericTypeDefinition">Opened Generic Type</param>
        /// <param name="innerTypes">Generic의 내부 수형</param>
        /// <param name="args">생성자의 인자들</param>
        /// <returns></returns>
        public static object CreateGeneric(Type genericTypeDefinition, Type[] innerTypes, params object[] args)
        {
            genericTypeDefinition.ShouldNotBeNull("genericTypeDefinition");
            innerTypes.ShouldNotBeNull("innerTypes");

            if (IsDebugEnabled)
            {
                log.Debug("Generic 수형의 인스턴스를 생성합니다. GenericType=[{0}], innerTypes=[{1}], args=[{2}]",
                          genericTypeDefinition.FullName, innerTypes.CollectionToString(), args.CollectionToString());
            }

            Type genericType = MakeGenericType(genericTypeDefinition, innerTypes);

            return(ActivatorTool.CreateInstance(genericType, args));
        }