其他分享
首页 > 其他分享> > CodeGo.net>如何动态分配集合中的属性

CodeGo.net>如何动态分配集合中的属性

作者:互联网

我从事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);**
}

提前致谢.

解决方法:

您可以使用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)
    {

我创建一个TestClass的新实例.

        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);
    }
}

标签:c-3-0,asp-net,c
来源: https://codeday.me/bug/20191105/1996914.html