zoukankan      html  css  js  c++  java
  • c# 类型拷贝

    /// <summary>
    /// 类 名:EntityHelper
    /// 类 说 明:实体操作方法类
    /// :
    /// 创建时间:2013/8/12
    /// </summary>
    public static class EntityHelper
    {
    /// <summary>
    /// 方 法 名:DataRowToEntity
    /// 方法说明:转化数据行到实体对象
    /// :
    /// 创建时间:2013/8/12
    /// </summary>
    /// <typeparam name="T">实体类型</typeparam>
    /// <param name="dr">数据行</param>
    /// <param name="excludefields">不进行赋值的字段</param>
    /// <returns>实体对象</returns>
    public static T DataRowToEntity<T>(DataRow dr, string excludefields) where T : new()
    {
    Type t = typeof(T);
    PropertyInfo[] pinfos = t.GetProperties();
    T obj = new T();
    foreach (PropertyInfo pi in pinfos)
    {
    if (!dr.Table.Columns.Contains(pi.Name))
    continue;
    if (!string.IsNullOrWhiteSpace(excludefields) && excludefields.Contains(pi.Name))
    continue;
    if (dr[pi.Name] != DBNull.Value)
    pi.SetValue(obj, dr[pi.Name], null);
    else
    pi.SetValue(obj, null, null);
    }
    return obj;
    }
    /// <summary>
    /// 方 法 名:DataRowToEntity
    /// 方法说明:转化数据行到实体对象
    /// :
    /// 创建时间:2013/8/12
    /// </summary>
    /// <typeparam name="T">实体类型</typeparam>
    /// <param name="dr">The dr.</param>
    /// <returns></returns>
    public static T DataRowToEntity<T>(DataRow dr) where T : new()
    {
    return DataRowToEntity<T>(dr, string.Empty);
    }
    /// <summary>
    /// 方 法 名:DataTableToEntityList
    /// 方法说明:转化数据行到实体对象
    /// :
    /// 创建时间:2013/8/12
    /// </summary>
    /// <typeparam name="T">实体类</typeparam>
    /// <param name="dt">数据表</param>
    /// <returns></returns>
    public static List<T> DataTableToEntityList<T>(DataTable dt) where T : new()
    {
    return DataTableToEntityList<T>(dt,null);
    }

    /// <summary>
    /// 方 法 名:DataTableToEntityList
    /// 方法说明:转化数据行到实体对象
    /// :
    /// 创建时间:2013/8/12
    /// </summary>
    /// <typeparam name="T">实体类</typeparam>
    /// <param name="dt">数据表</param>
    /// <param name="excludefields">不进行赋值的字段</param>
    /// <returns></returns>
    public static List<T> DataTableToEntityList<T>(DataTable dt,string excludefields) where T : new()
    {
    List<T> list = new List<T>();
    if (dt != null)
    {
    foreach (DataRow dr in dt.Rows)
    {
    T t = DataRowToEntity<T>(dr,excludefields);
    if (t != null)
    list.Add(t);
    }
    }
    return list;
    }
    /// <summary>
    /// 复制实体
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="source"></param>
    /// <returns></returns>
    public static T CopyEntity<T>(T source) where T : new()
    {
    Type t = typeof(T);
    PropertyInfo[] pinfos = t.GetProperties();
    T obj = new T();
    foreach (PropertyInfo pi in pinfos)
    {
    object v = GetMemberValue(source,pi);
    pi.SetValue(obj, v, null);
    }
    return obj;
    }
    /// <summary>
    /// 判断两个实体是否一样
    /// </summary>
    /// <param name="source"></param>
    /// <param name="dest"></param>
    /// <returns></returns>
    public static bool CheckEntityEquals(object source, object dest)
    {
    Type t = source.GetType();
    PropertyInfo[] pinfos = t.GetProperties();
    foreach (PropertyInfo pi in pinfos)
    {
    object v1 = GetMemberValue(dest, pi);
    object v = GetMemberValue(source, pi);
    if (!object.Equals(v1, v))
    return false;
    }
    return true;
    }

    /// <summary>
    /// 方法说明:获取实体成员的值
    /// 作 者:
    /// 创建时间:2013/9/14
    /// </summary>
    /// <param name="entity">实体</param>
    /// <param name="member">实体成员信息</param>
    /// <returns>实体成员的值</returns>
    public static object GetMemberValue(object entity, MemberInfo member)
    {
    if ((entity == null) || (member == null))
    {
    return null;
    }

    object value = null;

    switch (member.MemberType)
    {
    case MemberTypes.Field:
    FieldInfo field = member as FieldInfo;
    if (field != null)
    {
    value = field.GetValue(entity);
    }
    break;
    case MemberTypes.Property:
    PropertyInfo property = member as PropertyInfo;
    if (property != null)
    {
    value = property.GetValue(entity, null);
    }
    break;
    default:
    break;
    }

    return value;
    }
    /// <summary>
    /// 方法说明:获取实体成员的值
    /// 作 者:
    /// 创建时间:2013/9/14
    /// </summary>
    /// <param name="entity">实体</param>
    /// <param name="memberName">实体成员名称</param>
    /// <param name="ignoreCase">是否忽略大小写</param>
    /// <returns>实体成员的值</returns>
    public static object GetMemberValue(object entity, string memberName, bool ignoreCase)
    {
    if ((entity == null) || (string.IsNullOrEmpty(memberName)))
    {
    return null;
    }

    MemberInfo[] members;
    if (ignoreCase)
    {
    members = entity.GetType().GetMember(memberName, BindingFlags.Public | BindingFlags.IgnoreCase | BindingFlags.Instance);
    }
    else
    {
    members = entity.GetType().GetMember(memberName);
    }

    if ((members == null) || (members.Length == 0))
    {
    return null;
    }

    return GetMemberValue(entity, members[0]);
    }

    public static void SetMemberValue(object entity, string memberName, object memberValue)
    {
    if ((entity == null) || (string.IsNullOrEmpty(memberName)))
    {
    return;
    }

    MemberInfo[] members;
    members = entity.GetType().GetMember(memberName, BindingFlags.Public | BindingFlags.IgnoreCase | BindingFlags.Instance);
    if ((members == null) || (members.Length == 0))
    {
    return;
    }
    if (members[0] is FieldInfo)
    {
    if (memberValue == DBNull.Value)
    (members[0] as FieldInfo).SetValue(entity, null);
    else
    (members[0] as FieldInfo).SetValue(entity, memberValue);
    }
    else if (members[0] is PropertyInfo)
    {
    if (memberValue == DBNull.Value)
    (members[0] as PropertyInfo).SetValue(entity, null, null);
    else
    (members[0] as PropertyInfo).SetValue(entity, memberValue,null);
    }
    }
    }
    }

  • 相关阅读:
    雅虎、网易ajax标签导航效果的实现
    仿淘宝网站的导航标签效果!
    FLASH2007展望
    "运行代码”功能整理发布
    获取远程文件保存为本地文件(精简实用)
    整理JS+FLASH幻灯片播放图片脚本代码
    解决IE更新对FLASH产生影响
    模仿combox(select)控件
    0209.Domino R8.0.x升级指南
    Lotus Domino 中的高级 SMTP 设置Notes.ini相关参数
  • 原文地址:https://www.cnblogs.com/zengpeng/p/4348413.html
Copyright © 2011-2022 走看看