Beispiel #1
0
        private static void ArrayEnumeration(Converter.ValueActionDelegate action, Converter.ArrayAccessor accessor, int rank, object[] attributes)
        {
            Array array      = accessor.array;
            int   lowerBound = array.GetLowerBound(rank);
            int   upperBound = array.GetUpperBound(rank);

            if (rank + 1 < array.Rank)
            {
                for (int index = lowerBound; index <= upperBound; ++index)
                {
                    accessor.index[rank] = index;
                    Converter.ArrayEnumeration(action, accessor, rank + 1, attributes);
                }
            }
            else
            {
                for (int index = lowerBound; index <= upperBound; ++index)
                {
                    //Debug.Log($"ArrayEnumeration 枚举数组数据({index} / {array.Length})");

                    accessor.index[rank] = index;
                    Converter.ValueAction(action, accessor, attributes);
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// 类字段值枚举
        /// </summary>
        /// <param name="action"></param>
        /// <param name="accessor"></param>
        private static void FieldEnumeration(Converter.ValueActionDelegate action, Converter.Accessor accessor)
        {
            Type type = accessor.type;

            Converter.FieldAccessor fieldAccessor = new Converter.FieldAccessor(accessor.obj);

            //Debug.Log($"FieldEnumeration 开始枚举{type.Name}的字段 -->");

            foreach (FieldInfo field in type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic))
            {
                if (!(Attribute.GetCustomAttribute(field, typeof(NotConvertAttribute)) is NotConvertAttribute))
                {
                    fieldAccessor.SetFieldInfo(field);
                    //if (accessor.obj != null)
                    //    Debug.Log($"{type.Name}.{field.Name} = {field.GetValue(accessor.obj)}");
                    Converter.ValueAction(action, fieldAccessor, field.GetCustomAttributes(false));
                }
            }
        }
Beispiel #3
0
        private static void ValueAction(Converter.ValueActionDelegate action, Converter.Accessor accessor, object[] attributes)
        {
            // 普通字段
            if (action(accessor, attributes))
            {
                return;
            }

            // 数组字段、自定义类字段
            Type type = accessor.type;

            if (type.IsArray)
            {
                Converter.ArrayEnumeration(action, accessor, attributes);
            }
            else
            {
                if (!type.IsClass) // 不支持struct
                {
                    return;
                }
                Converter.FieldEnumeration(action, accessor);
            }
        }
Beispiel #4
0
 private static void ArrayEnumeration(Converter.ValueActionDelegate action, Converter.Accessor accessor, object[] attributes)
 {
     Converter.ArrayAccessor accessor1 = new Converter.ArrayAccessor(accessor.obj as Array);
     Converter.ArrayEnumeration(action, accessor1, 0, attributes);
 }