public string ReflectGetSet(string name) { var model = new Model(); CommHelper.ReflectSet(model, "Name", name); return(CommHelper.ReflectGet(model, "Name") as string); }
/// <summary> /// 设置appsettings.json配置信息 /// </summary> /// <param name="obj">配置信息对象</param> private static void SetConfig(object obj) { if (obj == null) { return; } //获取对象属性 var pros = obj.GetType().GetProperties(); //给对象属性赋值 foreach (var pro in pros) { //特性 var attr = pro.GetCustomAttributes <AppsettingsConfigAttribute>().FirstOrDefault(); if (attr == null) { if (pro.PropertyType.IsClass && pro.PropertyType.IsPrimitive == false) { var proVal = pro.GetValue(obj); if (proVal == null) { proVal = Activator.CreateInstance(pro.PropertyType); CommHelper.ReflectSet(obj, pro.Name, proVal); } SetConfig(proVal); } continue; } //字符串值 var strValue = configuration[attr.Key]; //如果是字符串类型 if (pro.PropertyType == typeof(string)) { CommHelper.ReflectSet(obj, pro.Name, strValue); } //如果是日期类型 else if (pro.PropertyType == typeof(DateTime)) { var value = Convert.ToDateTime(strValue); CommHelper.ReflectSet(obj, pro.Name, value); } else { var value = JsonConvert.DeserializeObject(strValue, pro.PropertyType); CommHelper.ReflectSet(obj, pro.Name, value); } } }
public void Comparative(int times) { Model model = new Model(); TimeSpan ts1; DateTime time1 = DateTime.Now; for (int i = 0; i < times; i++) { CommHelper.EmitSet <Model>(model, "Name", "测试1"); } DateTime time2 = DateTime.Now; ts1 = time2 - time1; Console.WriteLine("emit:" + ts1.TotalMilliseconds); DateTime t3 = DateTime.Now; for (int i = 0; i < times; i++) { CommHelper.ReflectSet(model, "Name", "测试2"); } DateTime t4 = DateTime.Now; ts1 = t4 - t3; Console.WriteLine("reflect" + ts1.TotalMilliseconds); DateTime t5 = DateTime.Now; for (int i = 0; i < times; i++) { model.Name = "测试3"; } DateTime t6 = DateTime.Now; ts1 = t6 - t5; Console.WriteLine("直接赋值" + ts1.TotalMilliseconds); }