(client) feat:主要实现实体的行为树和工作类 (#40)

Co-authored-by: zzdxxz <2079238449@qq.com>
Co-committed-by: zzdxxz <2079238449@qq.com>
This commit is contained in:
2025-07-21 13:58:58 +08:00
committed by TheRedApricot
parent 389376ec47
commit 28ddcda9a0
87 changed files with 9052 additions and 2504 deletions

View File

@ -279,8 +279,14 @@ namespace Data
value = reference;
}
}
else if(field.FieldType.IsArray)
{
value = ProcessArrayField(field, element);
}
else
{
value = Convert.ChangeType(element.Value, field.FieldType);
}
field.SetValue(define, value);
}
catch (Exception ex)
@ -289,7 +295,44 @@ namespace Data
}
}
}
private static object ProcessArrayField(FieldInfo field, XElement element)
{
Type elementType = field.FieldType.GetElementType();
if (elementType == null) return null;
var arrayElements = new List<object>();
foreach (var liElement in element.Elements())
{
if (elementType.IsSubclassOf(typeof(Define)))
{
Define nestedDefine = (Define)Activator.CreateInstance(elementType);
DefaultInitDefine(nestedDefine, liElement, elementType);
arrayElements.Add(nestedDefine);
}
else if (elementType.IsArray) // 嵌套数组处理
{
// 递归处理嵌套数组
var nestedArray = ProcessArrayField(
new { FieldType = elementType }.GetType().GetField("FieldType"),
liElement
);
arrayElements.Add(nestedArray);
}
else
{
// 基本类型处理
arrayElements.Add(Convert.ChangeType(liElement.Value, elementType));
}
}
// 构建结果数组
Array resultArray = Array.CreateInstance(elementType, arrayElements.Count);
for (int i = 0; i < arrayElements.Count; i++)
{
resultArray.SetValue(arrayElements[i], i);
}
return resultArray;
}
/// <summary>
/// 从 List<c>XDocument</c> 中查找指定根元素名称的文档。
/// </summary>