最近写了一段自定义的ConfigurationSection继承类,通过该class可以轻松得定义和读取配置文件信息,
注意这里使用的是c# 2.0来实现的,相比1.1必须通过实现IConfigurationSectionHandler接口来自定义配置节点类方便多了
不论是web.config还是app.config,都可以使用ConfigurationManager类加载配置文件中自定义的节点内容。
以下是配置文件的层次结构:
1
<?
xml version="1.0" encoding="utf-8"
?>
2
<
configuration
>
3
<
configSections
>
4
<
section
name
="orders"
type
="ConsoleTest.OrdersSection, ConsoleTest"
/>
5
</
configSections
>
6
<
orders
companyID
="2001"
>
7
<
order
number
="100001"
amount
="222.22"
>
8
<
lineItems
warehouseNumber
="02"
>
9
<
lineItem
number
="00-000-001"
description
="wii"
/>
10
</
lineItems
>
11
</
order
>
12
<
order
number
="300001"
amount
="33.33"
>
13
<
lineItems
warehouseNumber
="99"
>
14
<
lineItem
number
="00-000-001"
description
="xbox 360"
/>
15
<
lineItem
number
="00-000-003"
description
="playstation 3"
/>
16
</
lineItems
>
17
</
order
>
18
</
orders
>
19
</
configuration
>
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
2
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
3
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
4
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
5
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
6
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
7
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
8
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
9
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
10
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
11
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
12
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
13
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
14
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
15
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
16
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
17
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
18
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
19
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
注意order和lineItem节点都是允许重复出现的
以下是继承自ConfigurationSection的自定义配置节点类:
1
public
class
OrdersSection : ConfigurationSection
2
{
3
[ConfigurationProperty("companyID", IsRequired = true)]
4
public string CompanyID
5
{
6
get
7
{
8
return (string)base["companyID"];
9
}
10
set
11
{
12
base["companyID"] = value;
13
}
14
}
15![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
16
[ConfigurationProperty("", IsDefaultCollection = true)]
17
public OrderElementCollection Orders
18
{
19
get
20
{
21
return (OrderElementCollection)base[""];
22
}
23
}
24
}
25![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
26
public
class
OrderElementCollection : ConfigurationElementCollection
27
{
28
protected override ConfigurationElement CreateNewElement()
29
{
30
return new OrderElement();
31
}
32
protected override object GetElementKey(ConfigurationElement element)
33
{
34
return ((OrderElement)element).Number;
35
}
36![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
37
public override ConfigurationElementCollectionType CollectionType
38
{
39
get
40
{
41
return ConfigurationElementCollectionType.BasicMap;
42
}
43
}
44
protected override string ElementName
45
{
46
get
47
{
48
return "order";
49
}
50
}
51![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
52
public OrderElement this[int index]
53
{
54
get
55
{
56
return (OrderElement)BaseGet(index);
57
}
58
set
59
{
60
if (BaseGet(index) != null)
61
{
62
BaseRemoveAt(index);
63
}
64
BaseAdd(index, value);
65
}
66
}
67
}
68![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
69
public
class
OrderElement : ConfigurationElement
70
{
71
[ConfigurationProperty("number", IsRequired = true)]
72
public string Number
73
{
74
get
75
{
76
return (string)base["number"];
77
}
78
set
79
{
80
base["number"] = value;
81
}
82
}
83![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
84
[ConfigurationProperty("amount", IsRequired = true)]
85
public double Amount
86
{
87
get
88
{
89
return (double)base["amount"];
90
}
91
set
92
{
93
base["amount"] = value;
94
}
95
}
96![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
97
[ConfigurationProperty("lineItems", IsDefaultCollection = true)]
98
public LineItemElementCollection LineItems
99
{
100
get
101
{
102
return (LineItemElementCollection)base["lineItems"];
103
}
104
}
105
}
106![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
107
public
class
LineItemElementCollection : ConfigurationElementCollection
108
{
109
[ConfigurationProperty("warehouseNumber", IsRequired = true)]
110
public string WarehouseNumber
111
{
112
get
113
{
114
return (string)base["warehouseNumber"];
115
}
116
set
117
{
118
base["warehouseNumber"] = value;
119
}
120
}
121![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
122
protected override ConfigurationElement CreateNewElement()
123
{
124
return new LineItemElement();
125
}
126
protected override object GetElementKey(ConfigurationElement element)
127
{
128
return ( (LineItemElement)element ).Number;
129
}
130![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
131
public override ConfigurationElementCollectionType CollectionType
132
{
133
get
134
{
135
return ConfigurationElementCollectionType.BasicMap;
136
}
137
}
138
protected override string ElementName
139
{
140
get
141
{
142
return "lineItem";
143
}
144
}
145![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
146
public LineItemElement this[int index]
147
{
148
get
149
{
150
return (LineItemElement)BaseGet(index);
151
}
152
set
153
{
154
if (BaseGet(index) != null)
155
{
156
BaseRemoveAt(index);
157
}
158
BaseAdd(index, value);
159
}
160
}
161
}
162![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
163
public
class
LineItemElement : ConfigurationElement
164
{
165
[ConfigurationProperty("number", IsKey=true, IsRequired = true)]
166
public string Number
167
{
168
get
169
{
170
return (string)base["number"];
171
}
172
set
173
{
174
base["number"] = value;
175
}
176
}
177![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
178
[ConfigurationProperty("description", IsRequired = true)]
179
public string Description
180
{
181
get
182
{
183
return (string)base["description"];
184
}
185
set
186
{
187
base["description"] = value;
188
}
189
}
190
}
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
2
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
4
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
5
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
6
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
7
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
8
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
9
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
10
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
11
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
12
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
13
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
14
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
15
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
16
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
17
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
18
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
19
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
20
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
21
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
22
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
23
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
24
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
25
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
26
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
27
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
28
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
29
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
30
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
31
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
32
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
33
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
34
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
35
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
36
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
37
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
38
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
39
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
40
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
41
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
42
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
43
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
44
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
45
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
46
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
47
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
48
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
49
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
50
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
51
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
52
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
53
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
54
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
55
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
56
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
57
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
58
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
59
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
60
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
61
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
62
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
63
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
64
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
65
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
66
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
67
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
68
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
69
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
70
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
71
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
72
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
73
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
74
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
75
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
76
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
77
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
78
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
79
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
80
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
81
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
82
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
83
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
84
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
85
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
86
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
87
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
88
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
89
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
90
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
91
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
92
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
93
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
94
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
95
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
96
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
97
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
98
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
99
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
100
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
101
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
102
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
103
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
104
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
105
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
106
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
107
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
108
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
109
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
110
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
111
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
112
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
113
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
114
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
115
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
116
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
117
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
118
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
119
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
120
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
121
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
122
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
123
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
124
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
125
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
126
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
127
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
128
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
129
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
130
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
131
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
132
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
133
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
134
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
135
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
136
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
137
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
138
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
139
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
140
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
141
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
142
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
143
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
144
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
145
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
146
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
147
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
148
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
149
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
150
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
151
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
152
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
153
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
154
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
155
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
156
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
157
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
158
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
159
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
160
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
161
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
162
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
163
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
164
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
165
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
166
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
167
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
168
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
169
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
170
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
171
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
172
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
173
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
174
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
175
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
176
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
177
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
178
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
179
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
180
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
181
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
182
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
183
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
184
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
185
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
186
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
187
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
188
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
189
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
190
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)