none
江湖救急,急。如何遍历,并“循环设置属性”? RRS feed

  • 问题

  • 有一个类,它有35个属性,如下:

    public class ColumnModel
        {
            public string Column0 { get; set; }
            public string Column1 { get; set; }
            public string Column2 { get; set; }
            public string Column3 { get; set; }
            public string Column4 { get; set; }
            public string Column5 { get; set; }
            public string Column6 { get; set; }
            public string Column7 { get; set; }
            public string Column8 { get; set; }
            public string Column9 { get; set; }
            public string Column10 { get; set; }
            public string Column11 { get; set; }
            public string Column12 { get; set; }
            public string Column13 { get; set; }
            public string Column14 { get; set; }
            public string Column15 { get; set; }
            public string Column16 { get; set; }
            public string Column17 { get; set; }
            public string Column18 { get; set; }
            public string Column19 { get; set; }
            public string Column20 { get; set; }
            public string Column21 { get; set; }
            public string Column22 { get; set; }
            public string Column23 { get; set; }
            public string Column24 { get; set; }
            public string Column25 { get; set; }
            public string Column26 { get; set; }
            public string Column27 { get; set; }
            public string Column28 { get; set; }
            public string Column29 { get; set; }
            public string Column30 { get; set; }
            public string Column31 { get; set; }
            public string Column32 { get; set; }
            public string Column33 { get; set; }
            public string Column34 { get; set; }
        }

    功能要求:

          声明一个该类的实体集 “List<ColumnModel> columnmodellists”,并填充值,填充规则如下。

          1、声明循环变量“i”,其初始值为“0”。循环为“ColumnModel”的35个属性赋值。

          2、当“i”为“0”时,为“Column0”属性赋值。

               当“i”为“1”时,为“Column1”属性赋值。

               当“i”为“2”时,为“Column2”属性赋值。

                以此类推............................................

               当“i”为“34”时,为“Column34”属性赋值。

    代码片段如下:

           List<ColumnModel> columnmodellists = new List<ColumnModel>();                  

            columnmodellists.Clear();

             ColumnModel columnmodel = new ColumnModel();

            for(int i=0; i<35 ; i++)

            {

                    columnmodel.???????  =  i.ToString();

    问题:这里的属性名应该如何指定???             属性名也不能拼接字符串啊,怎么办???

            }

            columnmodellists.Add(columnmodel);

    如何这样循环赋值???

    如果使用反射。

         “对象与目标类型不匹配。”


    改写后的代码如下:

      List<ColumnModel> columnmodellists = new List<ColumnModel>();
      columnmodellists.Clear();
      foreach (var v in result)
      {
      ColumnModel columnmodel = new ColumnModel();
      columnmodel.Column0 = v.DpTypeName.ToString();
      //
      var entityProperties = typeof(ColumnModel).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
      int col_int = 1;

      foreach (var va in v.DpDatasArry)
      {
      string colname = "Column" + col_int;
      entityProperties[col_int].SetValue(colname, va.ToString(), null);

    问题:这一句提示错误“对象与目标类型不匹配。”,怎么回事??? 应该怎样改???

      }
      columnmodellists.Add(columnmodel);
      }

    foreach (var va in v.DpDatasArry)
      {
      string colname = "Column" + col_int;

      var colProperties = typeof(ColumnModel).GetProperty(colname);

      colProperties.SetValue(columnmodel, va.ToString(), null);

      col_int++;
      }

    “GetProperty”和“GetProperties”这两个方法就是基于反射机制的吗???


    Science and technology is my lover.


    2012年8月1日 6:02

答案

全部回复