334. Using brackets for hierarchy

עוד שימוש של Scopeים פנימיים הוא בשימוש בעבודה על אובייקטים היררכיים. למשל, נניח שאנחנו רוצים לכתוב בעזרת XmlWriter איזשהו אובייקט היררכי, למשל:

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Person
{
public int Age { get; set; }
public string Name { get; set; }
public Address Address { get; set; }
}
public class Address
{
public string Street { get; set; }
public string City { get; set; }
public int ZipCode { get; set; }
}

אז נוכל לכתוב קוד כזה:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static void WritePerson(Person person, XmlWriter writer)
{
writer.WriteStartElement("Person");
writer.WriteStartElement("Age");
writer.WriteValue(person.Age);
writer.WriteEndElement();
writer.WriteStartElement("Name");
writer.WriteValue(person.Name);
writer.WriteEndElement();
writer.WriteStartElement("Address");
writer.WriteStartElement("Street");
writer.WriteValue(person.Address.Street);
writer.WriteEndElement();
writer.WriteStartElement("City");
writer.WriteValue(person.Address.City);
writer.WriteEndElement();
writer.WriteStartElement("ZipCode");
writer.WriteValue(person.Address.ZipCode);
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
}

אבל כנראה קשה לעקוב אחרי מה קורה כאן. אפשר "להוסיף עומק" לפונקציה ע"י שימוש בScopeים:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public static void WritePerson(Person person, XmlWriter writer)
{
writer.WriteStartElement("Person");
{
{
writer.WriteStartElement("Age");
writer.WriteValue(person.Age);
writer.WriteEndElement();
}
{
writer.WriteStartElement("Name");
writer.WriteValue(person.Name);
writer.WriteEndElement();
}
{
writer.WriteStartElement("Address");
{
writer.WriteStartElement("Street");
writer.WriteValue(person.Address.Street);
writer.WriteEndElement();
}
{
writer.WriteStartElement("City");
writer.WriteValue(person.Address.City);
writer.WriteEndElement();
}
{
writer.WriteStartElement("ZipCode");
writer.WriteValue(person.Address.ZipCode);
writer.WriteEndElement();
}
writer.WriteEndElement();
}
}
writer.WriteEndElement();
}

טיפה יותר ברור מה קורה כאן.

שימו לב שהדוגמה היא להמחשה, ולא היינו רוצים לראות פונקציות ארוכות כאלה בקוד שלנו, אבל אפשר להשתמש בScopeים הפנימיים גם בפונקציות קצרות לקוד ברור יותר (כשזה מתאים).

המשך יום היררכי טוב.

שתף