예제 #1
0
        public string ReflectGetSet(string name)
        {
            var model = new Model();

            CommHelper.ReflectSet(model, "Name", name);

            return(CommHelper.ReflectGet(model, "Name") as string);
        }
예제 #2
0
        /// <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);
                }
            }
        }
예제 #3
0
        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);
        }