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:03

答案

  •  public class ColumnModel
        {
            public string Column0 { getset; }
            public string Column1 { getset; }
            public string Column2 { getset; }
            public string Column3 { getset; }
            public string Column4 { getset; }
            public string Column5 { getset; }
            public string Column6 { getset; }
            public string Column7 { getset; }
            public string Column8 { getset; }
            public string Column9 { getset; }
            public string Column10 { getset; }
            public string Column11 { getset; }
            public string Column12 { getset; }
            public string Column13 { getset; }
            public string Column14 { getset; }
            public string Column15 { getset; }
            public string Column16 { getset; }
            public string Column17 { getset; }
            public string Column18 { getset; }
            public string Column19 { getset; }
            public string Column20 { getset; }
            public string Column21 { getset; }
            public string Column22 { getset; }
            public string Column23 { getset; }
            public string Column24 { getset; }
            public string Column25 { getset; }
            public string Column26 { getset; }
            public string Column27 { getset; }
            public string Column28 { getset; }
            public string Column29 { getset; }
            public string Column30 { getset; }
            public string Column31 { getset; }
            public string Column32 { getset; }
            public string Column33 { getset; }
            public string Column34 { getset; }
        }
        class Program
        {
            static void Main(string[] args)
            {
                ColumnModel c = new ColumnModel();
                for (int i = 0; i < 35; i++)
                {
                    c.GetType().GetProperty("Column" + i).SetValue(c, "Column" + i, null);
                }
            }
        }

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年8月1日 7:19
    版主
  • entityProperties[col_int].SetValue(columnmodel , va.ToString(), null);

    http://feiyun0112.cnblogs.com/

    2012年8月2日 8:36
    版主

全部回复

  •  public class ColumnModel
        {
            public string Column0 { getset; }
            public string Column1 { getset; }
            public string Column2 { getset; }
            public string Column3 { getset; }
            public string Column4 { getset; }
            public string Column5 { getset; }
            public string Column6 { getset; }
            public string Column7 { getset; }
            public string Column8 { getset; }
            public string Column9 { getset; }
            public string Column10 { getset; }
            public string Column11 { getset; }
            public string Column12 { getset; }
            public string Column13 { getset; }
            public string Column14 { getset; }
            public string Column15 { getset; }
            public string Column16 { getset; }
            public string Column17 { getset; }
            public string Column18 { getset; }
            public string Column19 { getset; }
            public string Column20 { getset; }
            public string Column21 { getset; }
            public string Column22 { getset; }
            public string Column23 { getset; }
            public string Column24 { getset; }
            public string Column25 { getset; }
            public string Column26 { getset; }
            public string Column27 { getset; }
            public string Column28 { getset; }
            public string Column29 { getset; }
            public string Column30 { getset; }
            public string Column31 { getset; }
            public string Column32 { getset; }
            public string Column33 { getset; }
            public string Column34 { getset; }
        }
        class Program
        {
            static void Main(string[] args)
            {
                ColumnModel c = new ColumnModel();
                for (int i = 0; i < 35; i++)
                {
                    c.GetType().GetProperty("Column" + i).SetValue(c, "Column" + i, null);
                }
            }
        }

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年8月1日 7:19
    版主
  • entityProperties[col_int].SetValue(columnmodel , va.ToString(), null);

    http://feiyun0112.cnblogs.com/

    2012年8月2日 8:36
    版主
  • 还可以用索引

    大其心,可容天下之物; 虚其心,可受天下之善;

    2012年8月3日 9:12
  • public class ColumnModel
        {
            

            private string[] ColumnS = new string[35];

            public string this[int index]
            {
                get
                {
                    return ColumnS[index];
                }
                set
                {
                    ColumnS[index] = value;
                }
            }

        }
        class Program
        {
            static void Main(string[] args)
            {
                ColumnModel c = new ColumnModel();
                for (int i = 0; i < 35; i++)
                {
                     for (int i = 0; i < 35; i++)
                     {
                               c[i] = i.ToString();
                     }}
            }
        }



    大其心,可容天下之物; 虚其心,可受天下之善;

    2012年8月3日 9:30