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 == ))
{
return null;
} return GetMemberValue(entity, members[]);
} 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 == ))
{
return;
}
if (members[] is FieldInfo)
{
if (memberValue == DBNull.Value)
(members[] as FieldInfo).SetValue(entity, null);
else
(members[] as FieldInfo).SetValue(entity, memberValue);
}
else if (members[] is PropertyInfo)
{
if (memberValue == DBNull.Value)
(members[] as PropertyInfo).SetValue(entity, null, null);
else
(members[] as PropertyInfo).SetValue(entity, memberValue,null);
}
}
}
}
C# 对象操作的更多相关文章
- 前端学PHP之面向对象系列第五篇——对象操作
× 目录 [1]对象克隆 [2]对象比较[3]对象串行化[4]json 前面的话 本文主要介绍面向对象中的一些对象操作 对象克隆 对象复制,又叫对象克隆,可以通过 clone 关键字来完成 在多数情况 ...
- 原生JS中常用的Window和DOM对象操作汇总
一.常用的Window对象操作 Window对象中又包含了document.history.location.Navigator和screen几个对象,每个对象又有自己的属性方法,这里window可以 ...
- DOM、Window对象操作
一.DOM的基本概念 DOM是文档对象模型,这种模型为树模型:文档是指标签文档:对象是指文档中每个元素:模型是指抽象化的东西. 一.基本语法: 数据类型(字符串,小数,整数,布尔,时间) var, v ...
- XML转换为对象操作类详解
//XML转换为对象操作类 //一,XML与Object转换类 using System.IO; using System.Runtime.Serialization.Formatters.Binar ...
- Javascript 笔记与总结(2-3)Javascript 运算符、控制结构与对象操作
[连接运算符 + ] <script> console.log(1+2+'a'+3+4); </script> 输出: 3a34 [逻辑运算符]返回的是最早能判断表达式结果的那 ...
- POI Workbook接口和HSSFWorkbook对象和XSSFWorkbook对象操作相应excel版本
由于HSSFWorkbook只能操作excel2003一下版本,XSSFWorkbook只能操作excel2007以上版本,所以利用Workbook接口创建对应的对象操作excel来处理兼容性 @Te ...
- Python的对象操作(一)
python支持对象和函数 1. python是解释型语言,逐行运行 2. 对象调用 例子:删除文件的一个例子 2.1 先定义一个类 class MyApp: 2.2 import 引用要用到的模 ...
- c# 数据库编程(利用DataSet 和 DataAdaper对象操作数据库--单表操作)
一.概述 前面2篇文章,介绍了使用SqlCommand对象利用sql命令来操作数据库. 这篇文章我们来介绍使用c#的DataSet 和 DataAdaper对象操作操作数据库. 先来介绍下这两个对象是 ...
- jQuery(九)、ajax对象操作
1 数组和对象操作 1.jQuery.extend([deep,] target, object1, [objectN]) 用一个或多个其他对象来扩展一个对象,返回被扩展的对象. 如果不指定targe ...
- ES6常用对象操作
ES6常用对象操作 一. const 简单类型数据常量 // const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动.对于简单类型的数据(数值.字符串.布尔值),值就保存在 ...
随机推荐
- 密码学初级教程(八)SSL/TLS-为了更安全的通信
SSL/TLS是世界上应用最广泛的密码通信方法.用到对称密码.消息认证码.公钥密码.数字签名.伪随机数生成器等密码技术. 密码套件 SSL/TLS提供了一种密码通信的框架,SSL/TLS中使用的对称密 ...
- ubuntu 14.04 安装mysql server的分支MariaDB Server初级教程
序,MariaDB Server是Mysql的fork版本,与Mysql完美兼容,mysql在10年被sun收购,后sun被oracle收购,后mysql的创建者及项目长期技术带头人之一的Michae ...
- Shader 之 顶点变形
可以使3D物体通过顶点变形弯曲,常见于跑酷游戏的跑道.可向左.右.上.下弯曲. Shader "Custom/VertexColorCurved" { Properties { / ...
- codevs4096 删数问题
题目描述 Description 键盘输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数.编程对给定的N 和S,寻找一种方案使得剩下的数字组成的新数最小. 输入 ...
- 湖南国庆模拟赛day1 分组
题目大意:给你一个n个数的数列s,要对这些数进行分组,当有任意两个数在一种方案在一起而在另一种方案中不在一起算是两种不同的方案,一个组的"不和谐程度"为组内数的极差,如果只有一个人 ...
- ACM2 斐波那契数列
描述 在数学上,斐波那契数列(Fibonacci Sequence),是以递归的方法来定义: F0 = 0 F1 = 1 Fn = Fn - 1 + Fn - 2 用文字来说,就是斐波那契数列由0和1 ...
- BSA基础数据维护
平台 BSA基础数据维护 .扇区五个字段的内容 本来值为0,经过107上计算解析,得出正常的数值.然后106上报(200050),得到回复(200051). 查看回复数据,是否有错误.比如提示104 ...
- PHP中的位运算与位移运算(其它语言通用)
/* PHP中的位运算与位移运算 ======================= 二进制Binary:0,1 逢二进1,易于电子信号的传输 原码.反码.补码 二进制最高位是符号位:0为正数,1为负数( ...
- 如何配置和使用Spring框架的bean
1. 首先在src目录下新建beans.xml文件,该文件名可更改. 2. 编辑xml文件如下,这里需要注意的是beans的表头中信息需要根据不同的版本对应的内容不同,本例中使用的spring的版本为 ...
- Mac 上真正替换LiveWriter 的工具 - ecto
Mac 上真正替换LiveWriter 的工具 - ecto 13年开始使用mac.而后想把 windows 替换到.一直在寻找LiveWriter 的工具,至今终于找到 我先感谢这位博主 http: ...