我有一个继承另一个的类。我想使用反射循环遍历属性并将值写入文件。没问题。除了我想控制属性写出的顺序。有干净的方法吗?现在,问题1是子类中的属性写出来,然后父类中的proepries写出来。但是,我可能想跳过一些属性或只是重新排序。
现在是我的代码......
foreach (PropertyInfo bp in t.GetProperties())
{
Type pt = bp.PropertyType;
if ((pt.IsArray) && pt.FullName == "System.Char[]")
{
char[] caPropertyValue;
caPropertyValue = (char[])(bp.GetValue(oBatch, null));
string strPropertyValue = new string(caPropertyValue);
myBatch.Add(strPropertyValue);
}
}
答案 0 :(得分:3)
最简单的方法是按名称命名 - 按字母顺序排列。您也可以按照它们所属的类对它们进行分组,然后按名称对每个组进行排序。 LINQ使这些操作相对容易:
foreach( PropertyInfo bp in t.GetProperties()
.OrderBy( p => p.Name )
{...}
或
foreach( PropertyInfo bp in t.GetProperties()
.OrderBy( p => p.Name )
.GroupBy( p => p.DeclaringType.FullName )
.OrderBy( g => g.Key )
.SelectMany( g => g ) )
{...}
答案 1 :(得分:1)
您可以创建自己的属性,即'''OrderAttribute'''并将其放在属性上 比如
public class Man
{
[Order(0)]
string Name {get; set;}
[Order(1)]
int virtual Age {get; set;}
}
public class SuperMan:Man
{
[Order(-1)]
override int Age {get; set;}
}
在排序例程中,您可以通过pi.GetCustomAttribute()检查订单属性值,并对其进行排序。
答案 2 :(得分:0)
查看GetProperties语法。有一个参数告诉它你是否只想要当前类的属性,或者正如你所要求的那样,是整个继承链的属性。你必须走你的类结构来找到每个级别的属性。