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));
// 需要获取属性的类型。
var types = new List<Type>();
{
var target = type;
// 获取所有属性的名称,基类在前。
var chian = new List<Type>();
var current = type;
while (true)
{
if (target.Equals(RuntimeUtility.ObjectType)) break;
types.Add(target);
target = target.BaseType;
}
if (current.Equals(RuntimeUtility.ObjectType)) break;
chian.Add(current);
current = current.BaseType;
}
// 所有属性。
var list = new List<PropertyInfo>();
for (var i = types.Count - 1; i >= 0; i--)
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 (names.Contains(property.Name))
{
var properties = types[i].GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
list.Add(properties);
continue;
}
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

Loading…
Cancel
Save