From 294176d26281058916fa8bb3304f0a803168c521 Mon Sep 17 00:00:00 2001 From: Elivo Date: Sat, 1 Nov 2025 15:40:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=B4=BE=E7=94=9F=E7=B1=BB?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=E9=87=8D=E5=86=99=E6=9C=AA=E7=94=9F=E6=95=88?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Apewer/Source/TableStructure.cs | 38 ++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/Apewer/Source/TableStructure.cs b/Apewer/Source/TableStructure.cs index 0f970a9..b6956d2 100644 --- a/Apewer/Source/TableStructure.cs +++ b/Apewer/Source/TableStructure.cs @@ -225,26 +225,34 @@ namespace Apewer.Source { if (type == null) throw new ArgumentNullException(nameof(type)); - // 需要获取属性的类型。 - var types = new List(); + // 获取所有属性的名称,基类在前。 + var chian = new List(); + var current = type; + while (true) { - var target = type; - while (true) + if (current.Equals(RuntimeUtility.ObjectType)) break; + chian.Add(current); + current = current.BaseType; + } + var names = new List(); + 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; - types.Add(target); - target = target.BaseType; + if (names.Contains(property.Name)) + { + continue; + } + names.Add(property.Name); } } - // 所有属性。 - var list = new List(); - for (var i = types.Count - 1; i >= 0; i--) - { - var properties = types[i].GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); - list.Add(properties); - } - return list.ToArray(); + // 获取所有属性。 + 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