根据继承来排序属性列表
我有一些类都是从其他类继承的。每个类只能从另一个类继承,而不能从两个类继承。 我还得到了一个基类,它是我的继承树的“顶部”。 类是例如:根据继承来排序属性列表
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的性能和循环,我让他们在这个顺序:
- PredefinedType
- 轴
- ObjectPlacement
- 表示
- 对象类型
- GlobalId
- OwnerHistory
- 名称
- 说明
- _ID
不过,我需要的顺序,这些属性 “顶部至底部”,因此:
- _ID
- GlobalId
- OwnerHistory
- 名称
- 描述
- 对象类型
- ObjectPlacement
- 表示
- 轴
- 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