Browse Source

修正派生类属性重写未生效的问题。

master
王厅 3 days ago
parent
commit
294176d262
  1. 38
      Apewer/Source/TableStructure.cs

38
Apewer/Source/TableStructure.cs

@ -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;
while (true)
{ {
var target = type; if (current.Equals(RuntimeUtility.ObjectType)) break;
while (true) chian.Add(current);
current = current.BaseType;
}
var names = new List<string>();
for (var i = chian.Count - 1; i >= 0; i--)
{
var declared = chian[i].GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
foreach (var property in declared)
{ {
if (target.Equals(RuntimeUtility.ObjectType)) break; if (names.Contains(property.Name))
types.Add(target); {
target = target.BaseType; continue;
}
names.Add(property.Name);
} }
} }
// 所有属性。 // 获取所有属性。
var list = new List<PropertyInfo>(); var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
for (var i = types.Count - 1; i >= 0; i--) var result = names.Map(n => properties.Find(p => p.Name == n));
{ result = result.FindAll(p => p != null);
var properties = types[i].GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); return result;
list.Add(properties);
}
return list.ToArray();
} }
#endregion #endregion

Loading…
Cancel
Save