如何解决我们可以在将数据绑定到 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 已经按顺序定义的,我需要将值绑定到列,使用上面的代码行我能够实现所需的内容,因为我定义了我的属性名称与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 数据,因此我正在寻找是否可以为类属性设置顺序。
>解决方法
Type.GetProperties()
documentation:
GetProperties 方法不以特定顺序返回属性,例如字母顺序或声明顺序。您的代码不得依赖于返回属性的顺序,因为该顺序会有所不同。
它们碰巧按照自 .NET 开始以来在代码中定义的顺序返回,但文档总是明确表示这并不能保证。因此,您无论如何都需要对代码中获得的 PropertyInfo
实例进行排序。
对它们进行排序:
- 使用属性确定顺序,例如使用
[Display(Order = n)]
- 使用字符串数组对
Option
类中的订单进行硬编码 - 首先读取 Excel 标题
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。