根据继承来排序属性列表

我有一些类都是从其他类继承的。每个类只能从另一个类继承,而不能从两个类继承。 我还得到了一个基类,它是我的继承树的“顶部”。 类是例如:根据继承来排序属性列表

public class IfcAlignment : IfcLinearPositioningElement 

{

public IfcAlignmentTypeEnum PredefinedType {get; set;}

}

public class IfcLinearPositioningElement : IfcProduct

{

public IfcCurve Axis {get; set;}

}

public class IfcProduct : IfcObject

{

public IfcObjectPlacement ObjectPlacement {get; set;}

public IfcProductRepresentation Representation {get; set;}

}

public class IfcObject: IfcRoot

{

IfcLabel ObjectType {get; set;}

}

public class IfcRoot : IfcBase

{

public IfcGloballyUniqueId GlobalId {get; set;}

public IfcOwnerHistory OwnerHistory {get; set;}

public IfcLabel Name {get; set;}

public IfcText Description {get; set;}

}

public abstract class IfcBase

{

public int _ID {get; set;}

}

这是我的结构中的一组继承。现在当我通过他们呼吁IfcAlignment的性能和循环,我让他们在这个顺序:

  1. PredefinedType
  2. ObjectPlacement
  3. 表示
  4. 对象类型
  5. GlobalId
  6. OwnerHistory
  7. 名称
  8. 说明
  9. _ID

不过,我需要的顺序,这些属性 “顶部至底部”,因此:

  1. _ID
  2. GlobalId
  3. OwnerHistory
  4. 名称
  5. 描述
  6. 对象类型
  7. ObjectPlacement
  8. 表示
  9. PredefinedType

Therfore我想在每一个类中实现的方法,你可以调用,并且将在正确的顺序性排序。该方法是这样的,到目前为止:

 override public List<PropertyInfo> SortMyProperties(object entity) 

{

List<PropertyInfo> returnValue = new List<PropertyInfo>();

if (entity is IfcBase && !entity.GetType().Name.Contains("IfcBase"))

{

//Here I need to get the actual parent object:

// I tried the following, which did no work unfortunately:

// var parent = entity.GetType().BaseType;

PropertyInfo propInfo = parent.SortMyProperties(parent);

//get my own properties:

Type type = entity.GetType();

var genuineProps = typeof(/*type of the current class*/).GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);

foreach (var prop in genuineProps)

{

returnValue.Add(prop);

}

return returnValue;

}

else

{

var properties = this.GetType().GetProperties();

foreach (var prop in properties)

{

returnValue.Add(prop);

}

return returnValue;

}

}

有没有人有一个想法如何访问父oject并不仅仅是父类型,我在做我当前的代码?还有其他建议如何解决这个问题?

回答:

你可以试试这个。这将是更好的解决方案,以实现您的要求

  var type = typeof(IfcAlignment); 

List<string> PropertyNames= new List<string>();

while(type!=null)

{

var properties = type.GetProperties().Where(x => x.DeclaringType == type).Select(x=>x.Name).Reverse().ToList();

foreach(string name in properties)

{

PropertyNames.Add(name);

}

type = type.BaseType;

}

PropertyNames.Reverse();

以上是 根据继承来排序属性列表 的全部内容, 来源链接: utcz.com/qa/260626.html

回到顶部