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

标签 c# asp.net c#-3.0

我在 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# - 如何动态分配集合中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4146571/

相关文章:

C# 有时货币格式不起作用

c# - 用 using(...) { } 语句包装 Application.Run(new Form()) 是否安全?

c# - C# 中从 MemoryStream 反序列化抛出 OutOfMemory 异常

c# - 记录对象的状态。获取其所有属性值作为字符串

c# - 无法找到此模式的正则表达式

c# - 从不同线程将数据添加到 DataSet 并同时在 DataGridView 中显示它们

c# - 在C#中编译Java文件后如何获取输出的CLASS文件名?

c# - 获取带格式的属性 ToString

asp.net - asp.net 中基于 Web 的聊天,使用 ajax 计时器,是否会为大量用户执行

c# - 如何从 C++ COM 迁移到 C++CLI