原文:http://www.cnblogs.com/Ivony/archive/2006/04/03/365848.html

 

今天在CSDN上遇到一个问题:

http://community.csdn.net/Expert/topic/4658/4658047.xml?temp=.6713526

楼主想用树形的数据,本来是可以用XmlDocument的,可这个东西的效率实在是太差,我们推荐他用Hashtable嵌套,后来说写法太复杂。后来就想办法用递归调用来简化语法。

搞了半天,忽然想起C++里面常常玩的链式表达式的把戏,用下面的代码实现了功能,而且用的时候写法堪称完美。

 

 1public class TreeNode
 2ExpandedBlockStart.gifContractedBlock.gif  
{
 3
    Hashtable _dictionary;
 4    string _value = ""
;
 5

 6    public
 TreeNode()
 7ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
 8      _dictionary = new
 Hashtable();
 9    }

10
11    public TreeNode this[string
 key]
12ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
13      get

14ExpandedSubBlockStart.gifContractedSubBlock.gif      {
15        if ( key == null
 )
16          throw new ArgumentNullException( "key"
 );
17

18
        EnsureChildNode( key );
19

20        return
 (TreeNode) _dictionary[key];
21      }

22      set
23ExpandedSubBlockStart.gifContractedSubBlock.gif      {
24        if ( key == null
 )
25          throw new ArgumentNullException( "key"
 );
26

27
        EnsureChildNode( key );
28

29
        ( (TreeNode) _dictionary[key] ).SetValue( value._value );
30      }

31    }

32
33    private void EnsureChildNode( string
 key )
34ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
35      if ( !
_dictionary.ContainsKey( key ) )
36        _dictionary.Add( key, new
 TreeNode() );
37    }

38
39    public void SetValue( string
 value )
40ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
41      if ( value == null
 )
42        throw new ArgumentNullException( "value"
 );
43

44

45      _value =
 value;
46    }

47
48    public override string
 ToString()
49ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
50      return
 _value;
51    }

52
53    public static implicit operator TreeNode( string
 value )
54ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
55      TreeNode node = new
 TreeNode();
56
      node.SetValue( value );
57      return
 node;
58    }

59  }

60

 

转载于:https://www.cnblogs.com/myssh/archive/2009/10/29/1591993.html

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐