/// <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); }
/// <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 }
/// <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)); }