• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

根据继承来排序属性列表

c/c++ 来源:FlixFix 8次浏览

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

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(); 

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)