知识大全 C#利用反射简化给类字段赋值
Posted 知
篇首语:人们视需要为事物发生之“因”,其实,它往往是事物发生之“果”。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C#利用反射简化给类字段赋值相关的知识,希望对你有一定的参考价值。
C#利用反射简化给类字段赋值 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
这个例子主要的思路是建立一个类和数据库查询语句的字段结构是一致的
然后利用反射 直接用数据字段名称进行拼凑 给类对象的字段进行赋值
类的定义
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 == ) strSQL = "select A FNo A FName A FLock A FCaption A FType " + "A FMust A FMin A FMax A FDefault A FDate rn" + "A FDB A FAllow A FDisallow A FSB A FBig A FSmall A FInputMethod " + "A FCHK A FRelation A FDesc A FSecond rn" + "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 rn" + "INNER JOIN P_Field_Initial B ON A FNo=B FNo rn" + "where A FormType= AND B FSection= AND " + "(B FRegion = OR B FRegion = ) 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 rn" + "A FDB A FAllow A FDisallow A FSB A FBig A FSmall "+ "A FInputMethod A FCHK A FRelation A FDesc A FSecond rn" + "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 rn" +
"INNER JOIN P_Field_Initial B ON A FNo=B FNo rn" +
"where A FormType=" + Common gIntFormType ToString() +
" AND B FSection= AND (B FRegion=" + Common gIntRegion ToString() +
" OR B FRegion= ) ORDER BY A FOrder";
dtGet = DB GetDataTableBySQL(strSQL);
if (dtGet Rows Count <= )
Common ShowMessage("字段规则表没有数据 请马上联系软件工程师!" MessageBoxIcon Error);
return false;
//获得类信息 为下面的反射调用做准备
Type oType = Type GetType("CCB_Donet ClassFolder FieldRuleInfo");
//生成类对象数组 和数据库记录个数是一致的
mMainFieldRule = new FieldRuleInfo[dtGet Rows Count];
for (int i = ; i < dtGet Rows Count; i++)
//这里使用反射动态为FieldRuleInfo字段赋值数据
mMainFieldRule[i] = new FieldRuleInfo();
for (int j = ; 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
cha138/Article/program/net/201311/14047
相关参考