代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
CSharp
】
反射操作工具类
作者:
Abel
/ 发布于
2015/12/28
/
1218
using System; using System.Collections.Generic; using System.Data; using System.Reflection; namespace Framework.Utility { /// <summary> /// 反射操作工具类 /// </summary> public class ReflectionUtil { #region 根据反射机制将dataTable中指定行的数据赋给obj对象 /// <summary> /// 根据反射机制将dataTable中指定行的数据赋给obj对象 /// </summary> /// <param name="obj">obj对象</param> /// <param name="dataTable">dataTable</param> /// <param name="rowIndex">指定行</param> public static void ConvertDataRowToModel(object obj, DataTable dataTable, int rowIndex) { //指定行不存在 if (dataTable.Rows.Count < (rowIndex + 1)) { throw new Exception("指定行不存在!"); } //DataTable列为空! if (dataTable.Columns.Count < 1) { throw new Exception("DataTable列为空!"); } Type type = obj.GetType(); PropertyInfo[] pInfos = type.GetProperties(); try { for (int i = 0; i < dataTable.Columns.Count; i++) { for (int j = 0; j < pInfos.Length; j++) { //全部转换为小写的作用是防止数据库列名的大小写和属性的大小写不一致 if (dataTable.Columns[i].ColumnName.ToLower() == pInfos[j].Name.ToLower()) { PropertyInfo pInfo = type.GetProperty(pInfos[j].Name); //obj某一属性对象 object colValue = dataTable.Rows[rowIndex][i]; //DataTable 列值 #region 将列值赋给object属性 if (!ObjectIsNull(colValue)) { if (pInfos[j].PropertyType.FullName == "System.String") { pInfo.SetValue(obj, Convert.ToString(colValue), null); } else if (pInfos[j].PropertyType.FullName == "System.Int32") { pInfo.SetValue(obj, Convert.ToInt32(colValue), null); } else if (pInfos[j].PropertyType.FullName == "System.Int64") { pInfo.SetValue(obj, Convert.ToInt64(colValue), null); } else if (pInfos[j].PropertyType.FullName == "System.Single") { pInfo.SetValue(obj, Convert.ToSingle(colValue), null); } else if (pInfos[j].PropertyType.FullName == "System.Double") { pInfo.SetValue(obj, Convert.ToDouble(colValue), null); } else if (pInfos[j].PropertyType.FullName == "System.Decimal") { pInfo.SetValue(obj, Convert.ToDecimal(colValue), null); } else if (pInfos[j].PropertyType.FullName == "System.Char") { pInfo.SetValue(obj, Convert.ToChar(colValue), null); } else if (pInfos[j].PropertyType.FullName == "System.Boolean") { pInfo.SetValue(obj, Convert.ToBoolean(colValue), null); } else if (pInfos[j].PropertyType.FullName == "System.DateTime") { pInfo.SetValue(obj, Convert.ToDateTime(colValue), null); } //可空类型 else if (pInfos[j].PropertyType.FullName == "System.Nullable`1[[System.DateTime, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]") { pInfo.SetValue(obj, Convert.ToDateTime(colValue), null); } else if (pInfos[j].PropertyType.FullName == "System.Nullable`1[[System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]") { pInfo.SetValue(obj, Convert.ToDateTime(colValue), null); } else if (pInfos[j].PropertyType.FullName == "System.Nullable`1[[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]") { pInfo.SetValue(obj, Convert.ToInt32(colValue), null); } else if (pInfos[j].PropertyType.FullName == "System.Nullable`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]") { pInfo.SetValue(obj, Convert.ToInt32(colValue), null); } else if (pInfos[j].PropertyType.FullName == "System.Nullable`1[[System.Int64, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]") { pInfo.SetValue(obj, Convert.ToInt64(colValue), null); } else if (pInfos[j].PropertyType.FullName == "System.Nullable`1[[System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]") { pInfo.SetValue(obj, Convert.ToInt64(colValue), null); } else if (pInfos[j].PropertyType.FullName == "System.Nullable`1[[System.Decimal, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]") { pInfo.SetValue(obj, Convert.ToDecimal(colValue), null); } else if (pInfos[j].PropertyType.FullName == "System.Nullable`1[[System.Decimal, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]") { pInfo.SetValue(obj, Convert.ToDecimal(colValue), null); } else if (pInfos[j].PropertyType.FullName == "System.Nullable`1[[System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]") { pInfo.SetValue(obj, Convert.ToBoolean(colValue), null); } else if (pInfos[j].PropertyType.FullName == "System.Nullable`1[[System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]") { pInfo.SetValue(obj, Convert.ToBoolean(colValue), null); } else { throw new Exception("属性包含不支持的数据类型!"); } } else { pInfo.SetValue(obj, null, null); } #endregion 将列值赋给object属性 break; } } } } catch (Exception ex) { //LogTxt.LogException(ex.Message + "\r\n" + ex.Source + "\r\n" + ex.TargetSite + "\r\n" + ex.StackTrace + "\r\n"); throw ex; } } #endregion 根据反射机制将dataTable中指定行的数据赋给obj对象 #region 根据反射机制从obj对象取值并用该值添加datatable行 /// <summary> /// 根据反射机制从obj对象取值并用该值添加datatable行 /// </summary> /// <param name="obj">obj对象</param> /// <param name="dataTable">dataTable</param> /// <param name="rowIndex">指定行</param> public static void ConvertModelToNewDataRow(object obj, DataTable dataTable, int rowIndex) { //DataTable列为空! if (dataTable.Columns.Count < 1) { throw new Exception("DataTable列为空!"); } DataRow dr = dataTable.NewRow(); Type type = obj.GetType(); PropertyInfo[] pInfos = type.GetProperties(); try { for (int i = 0; i < dataTable.Columns.Count; i++) { for (int j = 0; j < pInfos.Length; j++) { //全部转换为小写的作用是防止数据库列名的大小写和属性的大小写不一致 if (dataTable.Columns[i].ColumnName.ToLower() == pInfos[j].Name.ToLower()) { PropertyInfo pInfo = type.GetProperty(pInfos[j].Name); object beanValue = pInfo.GetValue(obj, null); //将bean中属性值赋给datarow if (!ObjectIsNull(beanValue)) { dr[i] = beanValue; } else { dr[i] = DBNull.Value; } break; } } } dataTable.Rows.InsertAt(dr, rowIndex); dataTable.AcceptChanges(); } catch (Exception ex) { //LogTxt.LogException(ex.Message + "\r\n" + ex.Source + "\r\n" + ex.TargetSite + "\r\n" + ex.StackTrace + "\r\n"); throw ex; } } #endregion 根据反射机制从obj对象取值并用该值添加datatable行 #region 根据反射机制从obj对象取值并赋给datatable的指定行 /// <summary> /// 根据反射机制从obj对象取值并赋给datatable的指定行 /// </summary> /// <param name="obj">obj对象</param> /// <param name="dataTable">dataTable</param> /// <param name="rowIndex">指定行</param> public static void ConvertModelToSpecDataRow(object obj, DataTable dataTable, int rowIndex) { //指定行不存在 if (dataTable.Rows.Count < (rowIndex + 1)) { throw new Exception("指定行不存在!"); } //DataTable列为空! if (dataTable.Columns.Count < 1) { throw new Exception("DataTable列为空!"); } Type type = obj.GetType(); PropertyInfo[] pInfos = type.GetProperties(); try { for (int i = 0; i < dataTable.Columns.Count; i++) { for (int j = 0; j < pInfos.Length; j++) { //全部转换为小写的作用是防止数据库列名的大小写和属性的大小写不一致 if (dataTable.Columns[i].ColumnName.ToLower() == pInfos[j].Name.ToLower()) { PropertyInfo pInfo = type.GetProperty(pInfos[j].Name); object beanValue = pInfo.GetValue(obj, null); //将bean中属性值赋给datarow if (!ObjectIsNull(beanValue)) { dataTable.Rows[rowIndex][i] = beanValue; } else { dataTable.Rows[rowIndex][i] = DBNull.Value; } break; } } } dataTable.AcceptChanges(); } catch (Exception ex) { //LogTxt.LogException(ex.Message + "\r\n" + ex.Source + "\r\n" + ex.TargetSite + "\r\n" + ex.StackTrace + "\r\n"); throw ex; } } #endregion 根据反射机制从obj对象取值并赋给datatable的指定行 #region 根据对象名返回类实例 /// <summary> /// 根据对象名返回类实例 /// </summary> /// <param name="parObjectName">对象名称</param> /// <returns>对象实例(可强制转换为对象实例)</returns> public static object GetObjectByObjectName(string parObjectName) { Type t = Type.GetType(parObjectName); //找到对象 return System.Activator.CreateInstance(t); //实例化对象 } #endregion 根据对象名返回类实例 #region 判断对象是否为空 /// <summary> /// 判断对象是否为空 /// </summary> /// <param name="obj">对象</param> /// <returns></returns> static public bool ObjectIsNull(Object obj) { //如果对象引用为null 或者 对象值为null 或者对象值为空 if (obj == null || obj == DBNull.Value || obj.ToString().Equals("") || obj.ToString() == "") { return true; } return false; } #endregion 判断对象是否为空 #region 根据反射机制将DataTable转换为实体集合。 /// <summary> /// 根据反射机制将DataTable转换为实体集合。 /// </summary> /// <typeparam name="T">实体类型。</typeparam> /// <param name="dt">DataTable。</param> /// <returns>实体集合。</returns> public static List<T> ConvertDataTableToModelList<T>(DataTable dt) { if (dt == null) { return null; } List<T> result = new List<T>(); for (int i = 0; i < dt.Rows.Count; i++) { T t = Activator.CreateInstance<T>(); ConvertDataRowToModel(t, dt, i); result.Add(t); } return result; } #endregion 根据反射机制将DataTable转换为实体集合。 /// <summary> /// 通用(调用对象方法前先new一遍对象,故对象的状态无法保留;无用有无参构造函数,并调用无参方法), /// </summary> /// <typeparam name="T"></typeparam> /// <param name="methodName"></param> public static void InvokeMethod<T>(string methodName, object[] param = null) where T : new() { T instance = new T(); MethodInfo method = typeof(T).GetMethod(methodName); method.Invoke(instance, param); } /// <summary> /// 调用一个具体实例对象的方法,会保留对象状态 /// </summary> /// <param name="o"></param> /// <param name="methodName"></param> public static void InvokeMethod(object o, string methodName, object[] param = null) { o.GetType().GetMethod(methodName).Invoke(o, param); } } }
试试其它关键字
反射操作工具类
同语言下
.
文件IO 操作类库
.
Check图片类型[JPEG(.jpg 、.jpeg),TIF,GIF,BMP,PNG,P
.
机器名和IP取得(IPV4 IPV6)
.
Tiff转换Bitmap
.
linqHelper
.
MadieHelper.cs
.
RegHelper.cs
.
如果关闭一个窗体后激活另一个窗体的事件或方法
.
创建日志通用类
.
串口辅助开发类
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
Abel
贡献的其它代码
(
8
)
.
素数表
.
兼容ie ,firefox的图片预览效果
.
反射操作工具类
.
移位负数
.
ashx页面获取Session值
.
页面button按钮防止重复提交的方法
.
字符串替换Replace仅替换第一个匹配项
.
网络文件下载
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3