|
|
@ -225,26 +225,34 @@ namespace Apewer.Source |
|
|
{ |
|
|
{ |
|
|
if (type == null) throw new ArgumentNullException(nameof(type)); |
|
|
if (type == null) throw new ArgumentNullException(nameof(type)); |
|
|
|
|
|
|
|
|
// 需要获取属性的类型。
|
|
|
// 获取所有属性的名称,基类在前。
|
|
|
var types = new List<Type>(); |
|
|
var chian = new List<Type>(); |
|
|
{ |
|
|
var current = type; |
|
|
var target = type; |
|
|
|
|
|
while (true) |
|
|
while (true) |
|
|
{ |
|
|
{ |
|
|
if (target.Equals(RuntimeUtility.ObjectType)) break; |
|
|
if (current.Equals(RuntimeUtility.ObjectType)) break; |
|
|
types.Add(target); |
|
|
chian.Add(current); |
|
|
target = target.BaseType; |
|
|
current = current.BaseType; |
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
var names = new List<string>(); |
|
|
// 所有属性。
|
|
|
for (var i = chian.Count - 1; i >= 0; i--) |
|
|
var list = new List<PropertyInfo>(); |
|
|
{ |
|
|
for (var i = types.Count - 1; i >= 0; i--) |
|
|
var declared = chian[i].GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); |
|
|
|
|
|
foreach (var property in declared) |
|
|
|
|
|
{ |
|
|
|
|
|
if (names.Contains(property.Name)) |
|
|
{ |
|
|
{ |
|
|
var properties = types[i].GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); |
|
|
continue; |
|
|
list.Add(properties); |
|
|
|
|
|
} |
|
|
} |
|
|
return list.ToArray(); |
|
|
names.Add(property.Name); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 获取所有属性。
|
|
|
|
|
|
var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance); |
|
|
|
|
|
var result = names.Map(n => properties.Find(p => p.Name == n)); |
|
|
|
|
|
result = result.FindAll(p => p != null); |
|
|
|
|
|
return result; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
#endregion
|
|
|
#endregion
|
|
|
|