/// <summary> /// 属性赋值 /// </summary> /// <param name="type"></param> /// <param name="obj"></param> /// <param name="property"></param> /// <param name="val"></param> public static void Setter(Type type, Object obj, PropertyInfo property, object val) { lock (_syncRoot) { var name = type.FullName + property.Name + "Setter"; if (_invokeInfos.ContainsKey(name)) { _invokeInfos[name].Invoke(obj, val); } else { var del = FastInvoke.GetMethodInvoker(property.GetSetMethod(true)); _invokeInfos.Add(name, del); del.Invoke(obj, val); } } }
/// <summary> /// 属性取值 /// </summary> /// <param name="type"></param> /// <param name="obj"></param> /// <param name="property"></param> /// <returns></returns> public static object Getter(Type type, Object obj, PropertyInfo property) { lock (_syncRoot) { var name = type.FullName + property.Name + "Getter"; if (_invokeInfos.ContainsKey(name)) { return(_invokeInfos[name].Invoke(obj)); } else { var del = FastInvoke.GetMethodInvoker(property.GetGetMethod(true)); _invokeInfos.Add(name, del); return(del.Invoke(obj)); } } }
/// <summary> /// 将List~object转换成List~T /// </summary> /// <param name="params"></param> /// <returns></returns> public static object ToGList(this List <object> @params) { var type = @params.GetType(); var stype = type.GenericTypeArguments[0]; var gtype = type.GetGenericTypeDefinition().MakeGenericType(stype); var result = Activator.CreateInstance(gtype); var addMethod = gtype.GetMethod("AddRange"); var methodInvoker = FastInvoke.GetMethodInvoker(addMethod); methodInvoker.Invoke(result, @params.ToArray()); return(result); }