zoukankan      html  css  js  c++  java
  • C# 对象操作

    //*********************************************************************************
    //**********************************修改记录****************************************
    //修 改 人:
    //修改时间:
    //修改备注:
    //*********************************************************************************
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data;
    using System.Reflection;
    
    namespace BasePoint.Common
    {
        /// <summary>
        /// 类    名:EntityHelper
        /// 类 说 明:实体操作方法类
    /// </summary>
        public static class EntityHelper
        {
            /// <summary>
            /// 方 法 名:DataRowToEntity
            /// 方法说明:转化数据行到实体对象
    /// </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
            /// 方法说明:转化数据行到实体对象
    /// </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
            /// 方法说明:转化数据行到实体对象
    /// </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
            /// 方法说明:转化数据行到实体对象
    
            /// <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>
            /// 方法说明:获取实体成员的值
        /// </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>
            /// 方法说明:获取实体成员的值
        /// </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);
                }
            }
        }
    }
  • 相关阅读:
    ActiveMQ 即时通讯服务 浅析
    Asp.net Mvc (Filter及其执行顺序)
    ActiveMQ基本介绍
    ActiveMQ持久化消息的三种方式
    Windows Azure Virtual Machine (27) 使用psping工具,测试Azure VM网络连通性
    Azure China (10) 使用Azure China SAS Token
    Windows Azure Affinity Groups (3) 修改虚拟网络地缘组(Affinity Group)的配置
    Windows Azure Storage (22) Azure Storage如何支持多级目录
    Windows Azure Virtual Machine (26) 使用高级存储(SSD)和DS系列VM
    Azure Redis Cache (2) 创建和使用Azure Redis Cache
  • 原文地址:https://www.cnblogs.com/zengpeng/p/4274455.html
Copyright © 2011-2022 走看看