public void Test_SetValue_With_String_PropertyName() { var test = new TestClass(); ObjectSetValue.SetValue(test, "IntProperty", 184); Assert.AreEqual(184, test.IntProperty); }
public void Test_SetValue_With_String_FieldName() { var test = new TestClass(); ObjectSetValue.SetValue(test, "IntField", 100); Assert.AreEqual(100, test.IntField); }
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); }
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); }
/// <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); }
public void Test_Null_PropertyOrField_Throws() { var test = new TestClass(); ObjectSetValue.SetValue(test, "", 0); }