/// <summary>
/// 通过反射为对象属性赋值
/// </summary>
/// <typeparam name="T">类型参数</typeparam>
/// <param name="dataList">存储新的属性值集合</param>
/// <param name="oldModel">反射对象</param>
protected void SetValue<T>(Dictionary<string, object> dataList, T oldModel)
{
PropertyInfo[] propertyInfos = oldModel.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public);
foreach (var propertyInfo in propertyInfos)
{
//System.Nullable`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
Type pType = propertyInfo.PropertyType;
if (dataList.Keys.Contains(propertyInfo.Name))
{
if (pType.FullName == "System.Nullable`1[[System.Decimal, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]")
{
oldModel.GetType().GetProperty(propertyInfo.Name).SetValue(oldModel, Convert.ToDecimal(dataList[propertyInfo.Name]), null);
}
else if (pType.FullName == "System.Nullable`1[[System.Double, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]")
{
oldModel.GetType().GetProperty(propertyInfo.Name).SetValue(oldModel, Convert.ToDouble(dataList[propertyInfo.Name]), null);
}
else if (pType.FullName == "System.Nullable`1[[System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]")
{
oldModel.GetType().GetProperty(propertyInfo.Name).SetValue(oldModel, Convert.ToDateTime(dataList[propertyInfo.Name]), null);
}
else if (pType.FullName == "System.Nullable`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]")
{
oldModel.GetType().GetProperty(propertyInfo.Name).SetValue(oldModel, Convert.ToInt32(dataList[propertyInfo.Name]), null);
}
else if (pType.FullName == "System.Nullable`1[[System.Int16, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]")
{
oldModel.GetType().GetProperty(propertyInfo.Name).SetValue(oldModel, Convert.ToInt16(dataList[propertyInfo.Name]), null);
}
else
{
oldModel.GetType()
.GetProperty(propertyInfo.Name)
.SetValue(oldModel, Convert.ChangeType(dataList[propertyInfo.Name], pType), null);
}
}
}
}
克隆对象属性值
/// <summary>
/// 克隆对象的属性值
/// </summary>
/// <returns>T</returns>
public T Clone<T>(T oldObj) where T : class, new()
{
T newObject = Activator.CreateInstance(oldObj.GetType()) as T;
System.Reflection.PropertyInfo[] oldProperty = oldObj.GetType().GetProperties();
for (int i = 0; i < oldProperty.Length; i++)
{
PropertyInfo property = oldProperty[i];
if (property.Name.ToLower() == "id")//不复制编号值
continue;
object propertyvalue = oldProperty[i].GetValue(oldObj, null);
oldProperty[i].SetValue(newObject, propertyvalue, null);
}
return newObject;
}