c# - 我们可以在将数据绑定到 Excel 之前设置类属性的顺序吗?
问题描述
在使用反射的 c# 中,我获取类的属性名称,然后获取这些属性的值并将这些值绑定到 excel。
var userData = BAL.GetUserData();
foreach(var result in userData)
{
row.cells[0].value = result.UserId;
int index = 1;
foreach(var item in result.userOptions)
{
Option op = new Option;
PropertyInfo[] properties = typeof(Option).GetProperties();
foreach(PropertyInfo property in properties)
{
row.Cells[index].value = porperty.GetValue(item);
index++;
}
}
}
问题是列名是我的 excel 已经按顺序定义,我需要将值绑定到列,使用上面的代码行我能够实现所需的内容,因为我定义了我的 Option 类的属性名称在 excel 中定义的相同顺序。
Public class Option
{
Public string OptionText {get;set;}
public string OptionValue {get;set;}
public string OptionRange {get;set;}
public string OptionStep {get;set;}
}
将来,如果其他一些开发人员尝试以其他顺序更改 Option 类的属性,它将弄乱我的 excel 数据,所以我正在寻找是否有某种方式可以为类属性设置顺序。
解决方案
GetProperties 方法不按特定顺序返回属性,例如字母顺序或声明顺序。您的代码不得依赖于返回属性的顺序,因为该顺序会有所不同。
自 .NET 开始以来,它们碰巧按照代码中定义的顺序返回,但文档始终明确表示不能保证这一点。因此,无论如何您都需要对PropertyInfo
代码中获得的实例进行排序。
通过以下方式对它们进行排序:
- 使用属性确定顺序,例如使用
[Display(Order = n)]
Option
使用字符串数组对班级中的顺序进行硬编码- 首先阅读 Excel 标题
推荐阅读
- c# - Angular JS - 将字符串传递给 GET 方法并更新
- google-cloud-dataflow - 使用 gcloud 为数据流作业传递参数列表的语法
- vba - VBA 复选框不会将状态设置为 TRUE,但会设置为 FALSE
- c# - 为什么列表中的内容不改变?
- powershell - 继续查询 Powershell 开关参数
- python - 无法在vs代码中编译cpp和python文件
- java - 如何为 Amazon SNS (Java) 设置超时?
- python-3.x - 删除python中的停用词后,阿拉伯语单个字符仍然存在
- sql - 编写迭代自引用 SQL 查询
- python - 如何根据选择绘制熊猫分组(总和)数据