public void DynamicMethodFactory_CreatePropertyGetter() { object obj = null; int value = 5; PropertyInfo vo = typeof(User).GetProperties().FirstOrDefault(f => f.Name == "Age"); GetValueDelegate getValueDelegate = DynamicMethodFactory.CreatePropertyGetter(vo); User user = new User(); user.Age = value; if (getValueDelegate != null) { obj = getValueDelegate(user); } Assert.Equal(value, obj); }
public static object FastGetValue(this PropertyInfo propertyInfo, object obj) { if (propertyInfo == null) { throw new ArgumentNullException(nameof(propertyInfo)); } GetValueDelegate getter = (GetValueDelegate)GetterDic[propertyInfo]; if (getter == null) { getter = DynamicMethodFactory.CreatePropertyGetter(propertyInfo); GetterDic[propertyInfo] = getter; } return(getter(obj)); }
public void DynamicMethodFactory_CreatePropertyGetter_VO_STRING() { object obj = null; string value = "ABC"; PropertyInfo vo = typeof(User).GetProperties().FirstOrDefault(f => f.Name == "Address"); PropertyInfo property = typeof(Address).GetProperties().FirstOrDefault(f => f.Name == "Street"); GetValueDelegate getValueDelegate = DynamicMethodFactory.CreatePropertyGetter(vo, property); User user = new User(); user.Address = new Address(); user.Address.Street = value; if (getValueDelegate != null) { obj = getValueDelegate(user); } Assert.Equal(obj, value); }
static string Test_GetProperty(int count) { StringBuilder sb = new StringBuilder(System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion()); sb.AppendLine(); sb.AppendLine("Test_SetProperty"); OrderInfo testObj = new OrderInfo(); PropertyInfo propInfo = typeof(OrderInfo).GetProperty("OrderID"); int orderId = 0; GetValueDelegate getter2 = DynamicMethodFactory.CreatePropertyGetter(propInfo); sb.Append("EmitGet花费时间: "); Stopwatch watch2 = Stopwatch.StartNew(); for (int i = 0; i < count; i++) { orderId = (int)getter2(testObj); } watch2.Stop(); sb.AppendLine(watch2.Elapsed.ToString()); return(sb.ToString()); }