首页 > 解决方案 > 我们可以在将数据绑定到 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 数据,所以我正在寻找是否有某种方式可以为类属性设置顺序。

标签: c#oopproperties

解决方案


Type.GetProperties()文档

GetProperties 方法不按特定顺序返回属性,例如字母顺序或声明顺序。您的代码不得依赖于返回属性的顺序,因为该顺序会有所不同。

自 .NET 开始以来,它们碰巧按照代码中定义的顺序返回,但文档始终明确表示不能保证这一点。因此,无论如何您都需要对PropertyInfo代码中获得的实例进行排序。

通过以下方式对它们进行排序:

  • 使用属性确定顺序,例如使用[Display(Order = n)]
  • Option使用字符串数组对班级中的顺序进行硬编码
  • 首先阅读 Excel 标题

推荐阅读