Example #1
0
        public void Test_SetValue_With_String_PropertyName()
        {
            var test = new TestClass();

            ObjectSetValue.SetValue(test, "IntProperty", 184);
            Assert.AreEqual(184, test.IntProperty);
        }
Example #2
0
        public void Test_SetValue_With_String_FieldName()
        {
            var test = new TestClass();

            ObjectSetValue.SetValue(test, "IntField", 100);
            Assert.AreEqual(100, test.IntField);
        }
Example #3
0
        public void Test_SetValue_With_FieldInfo()
        {
            var test  = new TestClass();
            var field = test.GetType().GetField("IntField");

            ObjectSetValue.SetValue(test, field, 23);
            Assert.AreEqual(23, test.IntField);
        }
Example #4
0
        public void Test_SetValue_With_PropertyInfo()
        {
            var test = new TestClass();
            var prop = test.GetType().GetProperty("IntProperty");

            ObjectSetValue.SetValue(test, prop, 83);
            Assert.AreEqual(83, test.IntProperty);
        }
Example #5
0
        /// <summary>
        /// 把一列转换为对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dr"></param>
        /// <param name="columns"></param>
        /// <returns></returns>
        private static T DataRowToObject <T>(DataRow dr, DataColumnCollection columns) where T : new()
        {
            T t = new T();
            //将反射放在这个位置,防止重复反射
            Type objType   = typeof(T);
            var  itemArray = objType.GetProperties();

            foreach (DataColumn c in columns)
            {
                var item = itemArray.Where(a => string.Compare(a.Name, c.ColumnName, true) == 0).FirstOrDefault();
                if (item == null)
                {
                    continue;
                }
                try
                {
                    if (item.PropertyType.IsGenericType && item.PropertyType.GetGenericTypeDefinition().Equals(typeof(Nullable <>)))
                    {
                        NullableConverter nullableConverter = new NullableConverter(item.PropertyType);
                        var convertType = nullableConverter.UnderlyingType;
                        var obj         = Convert.ChangeType(dr[c.ColumnName], convertType);
                        ObjectSetValue.SetValue <T>(c.ColumnName, t, obj, item);
                    }
                    else
                    {
                        //防止多次的装箱拆箱操作
                        var obj = Convert.ChangeType(dr[c.ColumnName], item.PropertyType);
                        ObjectSetValue.SetValue <T>(c.ColumnName, t, obj, item);
                    }
                }
                catch
                {
                    //写日记
                }
            }

            return(t);
        }
Example #6
0
        public void Test_Null_PropertyOrField_Throws()
        {
            var test = new TestClass();

            ObjectSetValue.SetValue(test, "", 0);
        }