Files
BABA_YAGA/Assets/D.A. Assets/DA-Shared/Editor/DAInspector/Extensions.cs
2026-05-13 23:02:02 +07:00

55 lines
1.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using UnityEngine;
namespace DA_Assets.DAI
{
public static class Extensions
{
public static string[] GetFieldsArray<T>(this Expression<Func<T, object>> pathExpression)
{
MemberExpression me;
switch (pathExpression.Body.NodeType)
{
case ExpressionType.Convert:
case ExpressionType.ConvertChecked:
UnaryExpression ue = pathExpression.Body as UnaryExpression;
me = ((ue != null) ? ue.Operand : null) as MemberExpression;
break;
default:
me = pathExpression.Body as MemberExpression;
break;
}
List<string> fieldNames = new List<string>();
while (me != null)
{
var serInfo = me.Member.GetCustomAttributes<SerializePropertyAttribute>().ToArray()[0];
if (serInfo == null)
{
if (me.Member.Name.Contains("CS$") == false)
{
fieldNames.Add(me.Member.Name);
}
}
else
{
fieldNames.Add(serInfo.FieldName);
}
me = me.Expression as MemberExpression;
}
fieldNames.Reverse();
return fieldNames.ToArray();
}
}
}