From 105f4bd964e270669fd1e9d6af27a15149ec6510 Mon Sep 17 00:00:00 2001 From: m0_75251201 Date: Mon, 14 Jul 2025 14:33:55 +0800 Subject: [PATCH] =?UTF-8?q?(client)=20chore:=E6=94=B9=E8=BF=9BDefine?= =?UTF-8?q?=E7=9A=84=E6=89=93=E5=8D=B0=E5=87=BD=E6=95=B0=EF=BC=8C=E4=BD=BF?= =?UTF-8?q?=E5=85=B6=E8=83=BD=E6=89=93=E5=8D=B0=E5=AD=90=E7=B1=BB=E5=8F=8A?= =?UTF-8?q?=E5=85=B6=E9=80=92=E5=BD=92Define=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Client/Assets/Scripts/Data/Define.cs | 80 ++++++++++++++++++++++++---- 1 file changed, 71 insertions(+), 9 deletions(-) diff --git a/Client/Assets/Scripts/Data/Define.cs b/Client/Assets/Scripts/Data/Define.cs index 97d24d9..3f85e18 100644 --- a/Client/Assets/Scripts/Data/Define.cs +++ b/Client/Assets/Scripts/Data/Define.cs @@ -1,4 +1,9 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; using System.Text; using System.Xml.Linq; @@ -38,21 +43,78 @@ namespace Data description = xmlDef.Element("description")?.Value; return false; } + public override string ToString() { - // 定义对齐格式(左对齐,固定宽度) - const int labelWidth = -15; // 标签左对齐,占15字符 - const int valueWidth = -30; // 值左对齐,占30字符 - var sb = new StringBuilder(); - - sb.AppendLine($"{"DefName:",labelWidth}{defName,valueWidth}"); - sb.AppendLine($"{"Label:",labelWidth}{label,valueWidth}"); - sb.AppendLine($"{"Description:",labelWidth}{description,valueWidth}"); - sb.AppendLine($"{"PackID:",labelWidth}{packID,valueWidth}"); + + // 使用反射获取当前类的所有字段和属性 + var fieldsAndProperties = GetAllFieldsAndProperties(this); + + foreach (var member in fieldsAndProperties) + { + var name = member.Name; + var value = GetValue(member, this); + + if (value is IList list && list.Count > 0) // 如果是列表类型 + { + sb.AppendLine($"{name}:"); + foreach (var item in list) + { + sb.AppendLine($" - {FormatValue(item)}"); + } + } + else if (value is Define defineObject) // 如果是继承自 Define 的子类 + { + if (!string.IsNullOrEmpty(defineObject.defName)) + { + sb.AppendLine($"{name}: {defineObject.defName}"); + } + else + { + sb.AppendLine($"{name}:"); + sb.AppendLine(Indent(defineObject.ToString(), " ")); + } + } + else + { + sb.AppendLine($"{name}: {FormatValue(value)}"); + } + } return sb.ToString(); } + + private static IEnumerable GetAllFieldsAndProperties(object obj) + { + var type = obj.GetType(); + return type.GetFields(BindingFlags.Public | BindingFlags.Instance) + .Cast() + .Concat(type.GetProperties(BindingFlags.Public | BindingFlags.Instance).Cast()); + } + + private static object GetValue(MemberInfo member, object obj) + { + switch (member) + { + case FieldInfo field: + return field.GetValue(obj); + case PropertyInfo property: + return property.GetValue(obj); + default: + throw new ArgumentException("Unsupported member type."); + } + } + + private static string FormatValue(object value) + { + return value?.ToString() ?? "null"; + } + + private static string Indent(string text, string prefix) + { + return string.Join(Environment.NewLine, text.Split('\n').Select(line => prefix + line)); + } } } \ No newline at end of file