Пример #1
0
        /// <summary>
        /// 根据成员名称获取成员树节点
        /// </summary>
        /// <param name="memberName">成员名称</param>
        /// <param name="isDepth">是否深度搜索,false表示当前节点子节点</param>
        /// <returns>成员树节点</returns>
        protected memberNode getMember(string memberName, out bool isDepth)
        {
            int memberIndex = 0;

            while (memberIndex != memberName.Length && memberName[memberIndex] == '.')
            {
                ++memberIndex;
            }
            memberName  = memberName.Substring(memberIndex);
            memberIndex = currentMembers.Count - memberIndex - 1;
            if (memberIndex < 0)
            {
                memberIndex = 0;
            }
            memberNode value = currentMembers[memberIndex];

            isDepth = false;
            if (memberName.Length != 0)
            {
                string[] names = memberName.Split('.');
                for (; memberIndex >= 0; --memberIndex)
                {
                    if ((value = currentMembers[memberIndex].Get(names[0])) != null)
                    {
                        value.Path = memberIndex == 0 ? names[0] : (path(memberIndex) + "." + names[0]);
                        for (int nameIndex = 1; nameIndex != names.Length; ++nameIndex)
                        {
                            isDepth = true;
                            if ((value = value.Get(names[nameIndex])) == null)
                            {
                                break;
                            }
                            value.Path = value.Parent.Path + "." + names[nameIndex];
                        }
                        if (value == null)
                        {
                            break;
                        }
                        else
                        {
                            return(value);
                        }
                    }
                }
                error.Add(viewType.fullName() + " 未找到属性 " + currentMembers.lastOrDefault().FullPath + " . " + memberName);
            }
            return(value);
        }
Пример #2
0
        /// <summary>
        /// 根据成员名称获取成员树节点
        /// </summary>
        /// <param name="memberName">成员名称</param>
        /// <param name="isDepth">是否深度搜索,false表示当前节点子节点</param>
        /// <returns>成员树节点</returns>
        protected memberNode getMember(string memberName, out bool isDepth)
        {
            int memberIndex = 0;

            while (memberIndex != memberName.Length && memberName[memberIndex] == '.')
            {
                ++memberIndex;
            }
            memberName  = memberName.Substring(memberIndex);
            memberIndex = currentMembers.Count - memberIndex - 1;
            if (memberIndex < 0)
            {
                memberIndex = 0;
            }
            memberNode value = currentMembers[memberIndex];

            isDepth = false;
            if (memberName.Length != 0)
            {
                string[] names = memberName.Split('.');
                for (int lastIndex = names.Length - 1; memberIndex >= 0; --memberIndex)
                {
                    if ((value = currentMembers[memberIndex].Get(ref names[0], lastIndex == 0)) != null)
                    {
                        if (memberIndex == 0)
                        {
                            //keyValue<memberIndex, string> propertyIndex;
                            //if (!propertyNames.TryGetValue(names[0], out propertyIndex)) propertyIndex.Value = names[0];
                            //value.Path = propertyIndex.Value;
                            value.Path = names[0];
                        }
                        else
                        {
                            value.Path = path(memberIndex) + "." + names[0];
                        }
                        if (names.Length != 1)
                        {
                            isDepth = true;
                        }
                        for (int nameIndex = 1; nameIndex != names.Length; ++nameIndex)
                        {
                            if ((value = value.Get(ref names[nameIndex], nameIndex == lastIndex)) == null)
                            {
                                break;
                            }
                            value.Path = value.Parent.Path + "." + names[nameIndex];
                        }
                        if (value == null)
                        {
                            break;
                        }
                        else
                        {
                            return(value);
                        }
                    }
                }
                string message = viewType.fullName() + " 未找到属性 " + currentMembers.lastOrDefault().FullPath + " . " + memberName;
                if (checkErrorMemberName(memberName))
                {
                    error.Message(message);
                    return(null);
                }
#if MONO
                log.Default.Real(message, false, false);
#else
                error.Add(message);
#endif
            }
            return(value);
        }