コード例 #1
0
        private T GetPermission(bool isFirst, int nodeID, int realNodeID, NodeItemCollection nodes)
        {
            T set;

            if (isFirst == false)
            {
                if (m_Cached.TryGetValue(realNodeID, out set))
                {
                    return(set);
                }
            }
            if (true == this.TryGetValue(nodeID, out set))
            {
                if (set.NodeID != realNodeID)
                {
                    T clone = (T)set.Clone();

                    clone.RealNodeID = realNodeID;

                    if (false == m_Cached.ContainsKey(realNodeID))
                    {
                        lock (m_Cached)
                        {
                            if (false == m_Cached.ContainsKey(realNodeID))
                            {
                                m_Cached.Add(realNodeID, clone);
                            }
                        }
                    }
                    return(clone);
                }
                return(set);
            }


            if (nodeID != 0)
            {
                NodeItem nodeItem = nodes.GetValue(nodeID);
                if (nodeItem != null)
                {
                    T t = GetPermission(false, nodeItem.ParentID, realNodeID, nodes);
                    return(t);
                }
            }


            if (nodeID == 0)
            {
                T t = new T();
                t.RealNodeID = realNodeID;
                return(t);
            }

            return(default(T));
        }