代码之家  ›  专栏  ›  技术社区  ›  shamim

如何动态分配集合中的属性

  •  3
  • shamim  · 技术社区  · 14 年前

    我在C#工作。

    foreach (DataGridViewRow item in dataGridView1.Rows)
    {
        if (Convert.ToBoolean( item.Cells[0].Value) == true)
        {
            foreach (DataGridViewColumn col in dataGridView1.Columns)
            {
                **class oclass=new class();
                oclass.property = item.Cells[col.Name].Value.ToString();
                Collection.add(oclass);**
            }
        }
    
    }
    

    在上面 ,我想补课 动态属性 收集 。是否可以在C#中动态填充类属性?我的网格包含多个列。我的网格的列名与类属性名相同。

    foreach (DataGridViewColumn col in dataGridView1.Columns)
    {
        **class oclass=new class();
        oclass.col.Name= item.Cells[col.Name].Value.ToString();
        Collection.add(oclass);**
    }
    

    提前谢谢。

    2 回复  |  直到 13 年前
        1
  •  4
  •   Pieter van Ginkel    14 年前

    你可以这样做 PropertyInfo.SetValue() .

    我用过这个班 TestClass

    var type = typeof(TestClass);
    

    然后,我建立一个包含所有列名和 PropertyInfo

    var properties = new Dictionary<string, PropertyInfo>();
    
    foreach (DataGridViewColumn col in dataGridView1.Columns)
    {
        properties.Add(col.Name, type.GetProperty(col.Name));
    }
    

    然后,每排。

    foreach (DataGridViewRow item in dataGridView1.Rows)
    {
        if (Convert.ToBoolean( item.Cells[0].Value) == true)
        {
    

    我创建了 测试类 .

            var instance = new TestClass();
    
            foreach (DataGridViewColumn col in dataGridView1.Columns)
            {
    

    SetValue 使用列中的值设置实例的值。但是,要做到这一点,我们必须首先确保类型是正确的。

                object value = Convert.ChangeType(item.Cells[col.Name].Value, properties[col.Name].PropertyType);
    
                properties[col.Name].SetValue(instance, value, null);
            }
    

            Collection.Add(instance);
        }
    }
    
        2
  •  0
  •   Giorgio Minardi    14 年前

    我想念你的问题,你想用第二个片段来实现什么?顺便说一下,如果类中已经定义了类成员(属性),则可以在运行时设置该类成员(属性)的值。另一种方法是从父类派生一个新类并添加缺少的成员,或者如果您想要更动态的类,请使用.Net 4中引入的动态类型。