用好索引器。

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

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

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

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

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

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

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

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

18
        EnsureChildNode( key );
19

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

22      set
23      dot.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 )
34    dot.gif
{
35      if ( !
_dictionary.ContainsKey( key ) )
36        _dictionary.Add( key, new
 TreeNode() );
37    }

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

44

45      _value =
 value;
46    }

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

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

59  }

60

你可能感兴趣的:(用好索引器。)