gpt4 book ai didi

c# - 直到运行时才知道属性的匿名类型

转载 作者:太空宇宙 更新时间:2023-11-03 14:31:13 25 4
gpt4 key购买 nike

我有以下场景,我想创建一个 DataGrid,然后在运行时填充内容。

我遇到的问题是,因为在创建网格之前我不知道字段是什么,所以我不知道如何正确设置项目源。正如您在下面的代码中看到的,我将字段名称添加为列,然后遍历我的项目,此时我想为我设置属性(称为其字段名称)的每个项目创建一个匿名类型到字段名称值

foreach (string fieldName in listViewFieldCollection)
{
DataGridTextColumn newColumn = new DataGridTextColumn
{
Header = fieldName,
Binding = new Binding(fieldName)
};

dataGrid.Columns.Add(newColumn);
}

List<object> list = new List<object>();

foreach (ListItem listItem in listItems)
{
foreach (string fieldName in listViewFieldCollection)
{
list.Add(new
{
// I want to be able to dynamically build Anonymous type properties here
fieldName = listItem[fieldName]
});
}
}

dataGrid.ItemsSource = list;

例如。如果我有名为“标题”和“链接”的字段,那么我希望 list.Add(new 表现为

    list.Add(new
{
Title = listItem["Title"],
Link = listItem["Link"]
});

但是如果字段是“Manager”、“Title”和“Salary”,它应该表现得像

    list.Add(new
{
Manager = listItem["Manager"],
Title = listItem["Title"],
Salary = listItem["Salary"],
});

最佳答案

没有反射或代码生成是不可能的。

new
{
Manager = listItem["Manager"],
Title = listItem["Title"],
Salary = listItem["Salary"],
}

转换为具有三个字段的类,然后用几行代码来设置这些字段。这是由编译器生成的代码。所以在运行时你不能那样做。

关于c# - 直到运行时才知道属性的匿名类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2524967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com