C#实现利用反射简化给类字段赋值的方法
2018-10-12 14:07
906 查看
本文实例讲述了C#实现利用反射简化给类字段赋值的方法。分享给大家供大家参考。具体分析如下:
说明:这个例子主要的思路是建立一个类和数据库查询语句的字段结构是一致的
然后利用反射,直接用数据字段名称进行拼凑,给类对象的字段进行赋值
1.类的定义
namespace CCB_Donet.ClassFolder { public class FieldRuleInfo { public string gStrFNo; public string gStrFName; public string gStrFLock; public string gStrFCaption; public string gStrFType; public string gStrFMust; public string gStrFMin; public string gStrFMax; public string gStrFDefault; public string gStrFDate; public string gStrFDB; public string gStrFAllow; public string gStrFDisallow; public string gStrFSB; public string gStrFBig; public string gStrFSmall; public string gStrFInputMethod; public string gStrFCHK; public string gStrFRelation; public string gStrFDesc; public string gStrFSecond; public string gStrFQC; public string gStrFException; public string gStrFASupp; public string gStrFYQH; public string gStrFPos; public string gStrFStar; public string gStrFSave; public string gStrFAddress; public string gStrFLblColor; public string gStrFIsCheckList; } } #region 加载字段规则 private bool m_GetRule() { string strSQL = ""; DataTable dtGet = null; #if(DEBUG) try { #endif if (Common.gIntTypeOrder == 95) { strSQL = "select A.FNo,A.FName,A.FLock,A.FCaption,A.FType," + "A.FMust,A.FMin,A.FMax,A.FDefault,A.FDate,\r\n" + "A.FDB,A.FAllow,A.FDisallow,A.FSB,A.FBig,A.FSmall,A.FInputMethod," + "A.FCHK,A.FRelation,A.FDesc,A.FSecond,\r\n" + "A.FQC,A.FException,A.FASupp,A.FYQH,A.FPos,A.FStar,A.FSave,"+ "A.FAddress,A.FLblColor,A.FIsCheckList from P_Field_Rule95 A \r\n" + "INNER JOIN P_Field_Initial B ON A.FNo=B.FNo \r\n" + "where A.FormType=1 AND B.FSection='1' AND " + "(B.FRegion95=1 OR B.FRegion95=-1) ORDER BY A.FOrder"; } else { strSQL = "select A.FNo,A.FName,A.FLock,A.FCaption,A.FType,"+ "A.FMust,A.FMin,A.FMax,A.FDefault,A.FDate,\r\n" + "A.FDB,A.FAllow,A.FDisallow,A.FSB,A.FBig,A.FSmall,"+ "A.FInputMethod,A.FCHK,A.FRelation,A.FDesc,A.FSecond,\r\n" + "A.FQC,A.FException,A.FASupp,A.FYQH,A.FPos,A.FStar,"+ "A.FSave,A.FAddress,A.FLblColor,A.FIsCheckList "+ "from P_Field_Rule A \r\n" + "INNER JOIN P_Field_Initial B ON A.FNo=B.FNo \r\n" + "where A.FormType=" + Common.gIntFormType.ToString() + " AND B.FSection='1' AND (B.FRegion=" + Common.gIntRegion.ToString() + " OR B.FRegion=-1) ORDER BY A.FOrder"; } dtGet = DB.GetDataTableBySQL(strSQL); if (dtGet.Rows.Count <= 0) { Common.ShowMessage("字段规则表没有数据,请马上联系软件工程师!", MessageBoxIcon.Error); return false; } //获得类信息,为下面的反射调用做准备 Type oType = Type.GetType("CCB_Donet.ClassFolder.FieldRuleInfo"); //生成类对象数组,和数据库记录个数是一致的 mMainFieldRule = new FieldRuleInfo[dtGet.Rows.Count]; for (int i = 0; i < dtGet.Rows.Count; i++) { //这里使用反射动态为FieldRuleInfo字段赋值数据 mMainFieldRule[i] = new FieldRuleInfo(); for (int j = 0; j < dtGet.Columns.Count; j++) { //这里直接获取类的字段名称,然后把数据库里对应字段的值赋值给它 FieldInfo fieldInfo = oType.GetField("gStr" + dtGet.Columns[j].ColumnName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); fieldInfo.SetValue(mMainFieldRule[i], dtGet.Rows[i][j].ToString()); } } return true; #if(DEBUG) } catch (Exception ex) { return false; MyLog.WriteErrLog("frmDE-m_GetRule", ex.Message); } finally { dtGet = null; } #endif } #endregion
希望本文所述对大家的C#程序设计有所帮助。
您可能感兴趣的文章:
相关文章推荐
- C#利用反射简化给类字段赋值
- C#中利用反射操作私有字段与私有方法
- 利用c#反射实现实体类生成以及数据获取与赋值
- C#利用反射来判断对象是否包含某个属性的实现方法
- C#利用反射来判断对象是否包含某个属性的实现方法
- asp.net利用反射实现给model类赋值的方法
- 利用c#反射实现实体类生成以及数据获取与赋值
- C#利用反射来判断对象是否包含某个属性的实现方法
- 【Android开发经验】利用反射机制,获取类的字段、方法、并实现简单调用
- 利用反射机制,获取类的字段、方法、并实现简单调用
- C#利用反射调用基类私有方法 及 Unity实现自定义InputField
- C#中利用反射操作私有字段与私有方法
- 合理使用“.NET 扩展方法”来简化代码(例子:空值判断,利用扩展方法实现LINQ操作符ForEach)
- 合理使用“.NET扩展方法”来简化代码(例子:空值判断,利用扩展方法实现LINQ操作符ForEach)
- (原创)利用扩展方法,给 IEnumerable<T> 增加一个生成 Html 的 select 标签的方法,不用 C# 中的反射技术
- C#中,实体属性与数据库字段的进行反射赋值收藏
- C#反射新建类实例和调用类方法及属性帮助类 以及获取或设置对象属性中字段值帮助类
- C#利用扩展方法,不引入新的类型,实现矩阵的操作
- C# 如何利用反射来加载程序集,并调用程序集中有关类的方法
- c#利用反射+特性实现简单的实体映射数据库操作类实现自动增删改查(三)带源码写好的持久层