加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#利用反射简化给类字段赋值

发布时间:2020-12-15 17:53:56 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 这个例子主要的思路是建立一个类和数据库查询语句的字段结构是一致的 然后利用反射,直接用数据字段名称进行拼凑,给类对象的字段进行赋值 namespace

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

这个例子主要的思路是建立一个类和数据库查询语句的字段结构是一致的
然后利用反射,直接用数据字段名称进行拼凑,给类对象的字段进行赋值
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,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_Rule95 A rn" +
                        "INNER JOIN P_Field_Initial B ON A.FNo=B.FNo rn" +
                        "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.FMust,rn" +
                            "A.FDB,"+
                            "A.FInputMethod,A.FCHK,rn" +
                            "A.FQC,"+
                            "A.FSave,A.FAddress,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='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
 

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读