рдбрд╛рдпрдирд╛рдорд┐рдХрдПрдХреНрд╕рдПрдордПрд▓: рдПрдХреНрд╕рдПрдордПрд▓ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ "рдЧрддрд┐рд╢реАрд▓" рд╢реЗрд▓

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдПрдХ рдмрд╛рд░ рд▓рд┐рдЦрд╛ рдерд╛ рдХрд┐ рд╕реНрдерд┐рд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рдореЗрд░реЗ рдкреНрдпрд╛рд░ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдХреБрдЫ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдбрд╛рдпрдирд╛рдорд┐рдХ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рдлрд╛рдпрджреЗ рдЗрд╕рд╕реЗ рдЬреБрдбрд╝реЗ рдиреБрдХрд╕рд╛рди рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдкрд┐рдЫрд▓реА рдмрд╛рд░ рд╣рдордиреЗ рдбрд╛рдпрдирд╛рдорд┐рдХ LINQ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереА, рдФрд░ рдЗрд╕ рдмрд╛рд░ рд╣рдо рдирдП C # 4.0 рдлреАрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ XML рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реЗ рдХрдордЬреЛрд░ рдЯрд╛рдЗрдк рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд╛рдпрдирд╛рдорд┐рдХ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИред

рдиреЛрдЯ
рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдбрд╛рдпрдиреЗрдорд┐рдХрдПрдХреНрд╕рдПрдордПрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдЬреАрдердм рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ

рдкрд░рд┐рдЪрдп


рд╕рдВрд╕реНрдХрд░рдг 4.0 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рд╕реА # рдЧрддрд┐рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╢реБрд░реВ рдХрд┐рдпрд╛, рдЧрддрд┐рд╢реАрд▓ рдирд╛рдордХ рдПрдХ рдирдП рд╕реНрдерд┐рд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЗрд╕ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╕рдордп рдкрд░ рдЗрди рдкреНрд░рдЪрд╛рд▓рдиреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рд╕рдордп рдкрд░ рдЗрди рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд░рди рдЯрд╛рдЗрдо рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдВрдХрд▓рдХ DLR рд▓рд╛рдЗрдмреНрд░реЗрд░реА - рдбрд╛рдпрдиреЗрдорд┐рдХ рднрд╛рд╖рд╛ рд░рдирдЯрд╛рдЗрдо (*) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдЖрдпрд░рди рдкрд╛рдпрдерди рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рддреЗ рд╕рдордп рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдмрд╛рдж рдореЗрдВ .Net рдлреНрд░реЗрдорд╡рд░реНрдХ 4.0 рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрди рдЧрдпрд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЧрддрд┐рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдЖрдзрд╛рд░ рднреАред рдЙрдирдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрддред


рдЧрддрд┐рд╢реАрд▓ рдХреАрд╡рд░реНрдб рдХреЗ рдЙрджреНрднрд╡ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╕реА # рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЧрдИ; рдЖрдкрдХреЛ рдЕрднреА рднреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдЧрд╛, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд░реНрдгрдп рд░рдирдЯрд╛рдЗрдо рддрдХ рджреЗрд░реА рд╣реЛ рд░рд╣реА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреЛрдИ рднреА рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЕрд╡рд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рджреИрдирд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛; рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЕрдиреНрдп рдбрд╛рдпрдирд╛рдорд┐рдХ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рднрд╛рд╖рд╛рдУрдВ, рдЬреИрд╕реЗ рдЖрдпрд░рди рдкрд╛рдпрдерди, рдЖрдпрд░рди рд░реВрдмреА, рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдХрдордЬреЛрд░ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ, рдЬреИрд╕реЗ VSTO (рдСрдлрд┐рд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдЯреВрд▓реНрд╕) рдФрд░ рдЕрдиреНрдп COM рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдЧрддрд┐рд╢реАрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдЙрддреНрдХреГрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рд╡рд╕реНрддреБрдУрдВ рдкрд░ "рдЧрддрд┐рд╢реАрд▓" рд░реИрдкрд░ рдмрдирд╛рдирд╛ рд╣реИред рдПрдХ рдмрд╣реБрдд рдкреНрд░рд╕рд┐рджреНрдз рдЙрджрд╛рд╣рд░рдг рдирд┐рдЬреА рдпрд╛ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ (**) рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реИ; рдПрдХ рдЕрдиреНрдп рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз рдЙрджрд╛рд╣рд░рдг XML рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдЖрд╡рд░рдг рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реИред рдпрд╣ рджреВрд╕рд░реА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдареАрдХ рд╣реИ рдХрд┐ рд╣рдо рдпрд╣рд╛рдВ рд░реБрдХреЗрдВрдЧреЗред

XML рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг


рддреЛ, рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбреЗрдЯрд╛ (***) рд╣реИрдВ:

< books >
< book >
< title > Mortal Engines </ title >
< author name ="" Philip Reeve "" />
</ book >
< book >
< title > The Talisman </ title >
< author name ="" Stephen King "" />
< author name ="" Peter Straub "" />
</ book >
</ books >


* This source code was highlighted with Source Code Highlighter .


рдФрд░ рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп рдПрдХ рд╕рд░рд▓ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝реЗрдЧрд╛ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧрд╛ред рдмреЗрд╢рдХ, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ XmlSerializer рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЗрд╕ рд╕рднреА рд╕рд╛рдорд╛рди рдХреЛ рдХреБрдЫ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдСрдмреНрдЬреЗрдХреНрдЯ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмреБрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдЪрд┐рдд рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдПрдХ рд╣рд▓реНрдХрд╛ рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, LINQ 2 XML рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред

рдЕрдЧрд░ рд╣рдо рдпрд╣ рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рд▓рд╛рдЗрди рдкреБрд╕реНрддрдХреЛрдВ рдирд╛рдордХ рдПрдХ рдЪрд░ рдореЗрдВ рд╕рдорд╛рд╣рд┐рдд рд╣реИ, рддреЛ рдЖрдк рдХреБрдЫ рд╕рд░рд▓ рд╢рдмреНрджреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

var element = XElement .Parse(books);
string firstBooksTitle =
element.Element( "book" ).Element( "title" ).Value;
Assert.That(firstBooksTitle, Is.EqualTo( "Mortal Engines" ));

string firstBooksAuthor =
element.Element( "book" ).Element( "author" ). Attribute ( "name" ).Value;
Assert.That(firstBooksAuthor, Is.EqualTo( "Philip Reeve" ));

string secondBooksTitle =
element.Elements().ElementAt(1).Element( "title" ).Value;
Assert.That(secondBooksTitle, Is.EqualTo( "The Talisman" ));


* This source code was highlighted with Source Code Highlighter .


рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХреНрд╕рдИрдореЗрдВрдЯ рдХреЗ рд╕реНрдкрд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдЦрд┐рд▓рд╛рдл рдмрд┐рд▓реНрдХреБрд▓ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдХрд╛рдлреА рд╕рд░рд▓ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдпрд╣ рдХреЛрдб рдХрдорд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдХрд╛рдлреА рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдпрд╣ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдИрдорд╛рдирджрд╛рд░ рдирд╣реАрдВ рд╣реИ: рдпрджрд┐ рдкреБрд╕реНрддрдХ рдирд╛рдо рдХрд╛ рдХреЛрдИ рддрддреНрд╡ рдпрд╛ рдкреБрд╕реНрддрдХ рдЪрд░ рдореЗрдВ рд╢реАрд░реНрд╖рдХ рдирд╛рдо рдХрд╛ рдХреЛрдИ рддрддреНрд╡ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдореЗрдВ NullReferenceException рдорд┐рд▓рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдХреЛрдб рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдЕрдВрддрд┐рдо рд░реВрдк рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдХреБрдЫ рд╣рдж рддрдХ рдЗрд╕рдХреЗ рдкрдврд╝рдиреЗ, рд╕рдордЭрдиреЗ рдФрд░ рд░рдЦрд░рдЦрд╛рд╡ рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░реЗрдЧрд╛ред

// Dynamic Wrapper XElement
dynamic dynamicElement = // ...

//
string firstBooksTitle = dynamicElement.book.title;
Assert.That(firstBooksTitle, Is.EqualTo( "Mortal Engines" ));

// , ,
string firstBooksAuthor = dynamicElement.book.author[ "name" ];
Assert.That(firstBooksAuthor, Is.EqualTo( "Philip Reeve" ));

// , ,
string secondBooksTitle = dynamicElement.book[1].title;
Assert.That(secondBooksTitle, Is.EqualTo( "The Talisman" ));


* This source code was highlighted with Source Code Highlighter .


рд╣рдореЗрдВ рдЕрднреА рднреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рддрддреНрд╡ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдмрд╛рдж рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ, рд╕рдм рдХреБрдЫ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдорд╛рд░реЗ рд╣рд╛рде рдореЗрдВ рд╣реИ, рд╣рдо рдПрдХ рдФрд░ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЕрдиреНрдп рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ред рдлрд┐рд░ рднреА, рдкреНрд░рд╛рдкреНрдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рд░рд▓ рд╣реИ рдФрд░ LINQ 2 XML рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдПрдХ рд╕рд░рд▓ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдирд╛ рд╣реЛрдЧрд╛: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдкреАрдЫреЗ рдХреНрдпрд╛ рдЫрд┐рдкрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП " рд╣рдореЗрдВ рдПрдХ XElement рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдПрдХ рдбрд╛рдпрдирд╛рдорд┐рдХ рд░реИрдкрд░ рдорд┐рд▓рддрд╛ рд╣реИ " рдЗрд╕рд▓рд┐рдП рдРрд╕реА рд╕рдбрд╝рдХ рдЬрд╛рджреВ рд╣реИ рд╕рдВрднрд╡ рд╣реИред

XML рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП "рдбрд╛рдпрдиреЗрдорд┐рдХ" рдЖрд╡рд░рдг рдмрдирд╛рдирд╛



рдбрд╛рдпрдиреЗрдорд┐рдХ рд╢реЗрд▓ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рд╡реНрдпрд╛рдкрдХ рдХрд╛рд░реНрдпрд╢реАрд▓рддрд╛ рд╣реЛрдЧреА, рдбрд╛рдпрдирд╛рдорд┐рдХрдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрд▓рд╛рд╕ рдХреЛ System.Dynamic рдирд╛рдорд╕реНрдерд╛рди рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ TryXXX рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдИ рд╡рд░реНрдЪреБрдЕрд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдбрд╛рдпрдиреЗрдорд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рд╕рднреА рдмреБрдирд┐рдпрд╛рджреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ "рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рд░рди рдЯрд╛рдЗрдо рдкрд░ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рдзрд┐ рдХреЙрд▓, рдПрдХреНрд╕реЗрд╕рд┐рдВрдЧ рдЧреБрдг, рдкреНрд░рдХрд╛рд░ рд░реВрдкрд╛рдВрддрд░рдг рдФрд░ рдХрдИ рдЕрдиреНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдореЗрдВ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдбрд╛рдпрдиреЗрдорд┐рдХрдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдПрдХ рдЗрдирд╣реЗрд░рд┐рдЯреЗрд░реЗрдЯрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рдП , рдЬреЛ рдПрдХ рдПрдХреНрд╕рд╛рдЗрдореЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗ рдФрд░ рдХрдИ рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗ:

/// <summary>
/// " " XElement
/// </summary>
public class DynamicXElementReader : DynamicObject
{
private readonly XElement element;

private DynamicXElementReader( XElement element)
{
this .element = element;
}

public static dynamic CreateInstance( XElement element)
{
Contract.Requires(element != null );
Contract.Ensures(Contract.Result< object >() != null );

return new DynamicXElementReader(element);
}
}


* This source code was highlighted with Source Code Highlighter .


рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рд░рдЦрд╛рдиреЗ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ; рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбрд╛рдпрдиреЗрдорд┐рдХрдПрдХреНрд╕рдПрдордПрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛрдб рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рднреА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд╢реЗрд▓ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдиреБрдмрдВрдзреЛрдВ (рдХреЛрдб рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХреЗрд╡рд▓ рдРрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд░реНрдЧреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ, рдкрд░реАрдХреНрд╖рдг рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЖрдкрдХреЛ рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдореЗрд░реА рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЗ рд▓рд┐рдП рдЕрд╕рдВрдЧрдд рд╣реИ (рдпрджреНрдпрдкрд┐ рдмрд╣реБрдд рд╣реА рд╡реНрдпрд░реНрде рд╣реИ), рддреЛ рдЬрд╛рджреВ рдХреА рдЦреЛрдЬ / рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЕрдкрдиреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрдВрддреНрд░ рдХреЗ рд╕рд╛рде рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдм рдЖрдЗрдП рдбрд╛рдпрдиреЗрдорд┐рдХрдПрдХреНрд▓реЗрдореЗрдВрдЯрд░реАрдбрд░ рд╢реНрд░реЗрдгреА рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдереНрдпреЛрд░реА рдХрд╛ рдПрдХ рдмрд┐рдЯ: рдбрд╛рдпрдиреЗрдорд┐рдХ рдСрдмрдЬреЗрдХреНрдЯ рд╕реЗ рд╡рд╛рд░рд┐рд╕ рд╡рд░реНрдЧ рдХреА рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдпрд╛ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рдХреЙрд▓ рджреЛ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ: рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕ рд╣реА рд╡рд╛рд░рд┐рд╕ рдореЗрдВ рдЗрд╕реА рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдзрд┐ рдпрд╛ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреЛрдЬ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдЗрд╕ рд╕рджрд╕реНрдп рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЪреВрдБрдХрд┐ рдХреЛрдИ рднреА рдЖрд╡рд░рдг рдХрднреА рднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреЛрдзрдЧрдореНрдп рдФрд░ рдмреЛрдзрдЧрдореНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ (рдФрд░ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ), рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд XElement рдЖрд╡рд░рдг рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЗрдЦрд╛ рдерд╛, рд╣рдореЗрдВ рджреЛ рдЗрдВрдбреЗрдХреНрд╕ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдПрдХ рдХреЛ рдПрдХ рдЗрдВрдЯ рдореЗрдВ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдПрдХ рд╕рдмрдорд┐рдЯ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рджреВрд╕рд░реЗ рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реЗрдирд╛ рд╣реЛрдЧрд╛ (рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдмрд╛рдж рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ, рдПрдХреНрд╕рдирд╛рдо ) рдФрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд▓реМрдЯрд╛рдПрдВред

public class DynamicXElementReader : DynamicObject
{
/// <summary>
/// true, .
/// </summary>
/// <remarks>
/// Pure
/// </remarks>
[Pure]
public bool HasParent()
{
return element.Parent != null ;
}

public dynamic this [XName name]
{
get
{
Contract.Requires(name != null );

XAttribute attribute = element. Attribute (name);

if (attribute == null )
throw new InvalidOperationException(
"Attribute not found. Name: " + name.LocalName);

return attribute.AsDynamic();
}
}

public dynamic this [ int idx]
{
get
{

Contract.Requires(idx >= 0, "Index should be greater or equals to 0" );
Contract.Requires(idx == 0 || HasParent(),
"For non-zero index we should have parent element" );

//
if (idx == 0)
return this ;

// "" .
// ,
var parent = element.Parent;
Contract.Assume(parent != null );

XElement subElement = parent.Elements().ElementAt(idx);

// subElement null, ElementAt
// , .
// ,
// Contract.Assume
Contract.Assume(subElement != null );

return CreateInstance(subElement);
}
}

public XElement XElement { get { return element; } }

}


* This source code was highlighted with Source Code Highlighter .


рдкрд╣рд▓рд╛ рдЗрдВрдбреЗрдХреНрд╕ XName рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЗрд╕рдХреЗ рдирд╛рдо рд╕реЗ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░ рднреА рдЧрддрд┐рд╢реАрд▓ рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп XAttribute рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП AsDynamic рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдХреЛрдИ рднреА XAttribute рдкреНрд░рдХрд╛рд░ рдХреЛ рд╡рд╛рдкрд╕реА рдорд╛рди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдореВрд▓реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рдХреЗ рдореВрд▓реНрдп рдХреА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдпрд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдореВрд▓реНрдп рдХрд▓рд╛рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рд╢реЗрд▓ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдФрд░ рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдм рджреЛ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЪрд▓рддреЗ рд╣реИрдВ (рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП) рдбрд╛рдпрдирд╛рдорд┐рдХрдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рд╡рд░реНрдЪреБрдЕрд▓ рддрд░реАрдХреЗ: рдЯреНрд░рд╛рдЗрдЧреЗрдЯрдордореНрдмрд░ рд╡рд┐рдзрд┐ - рдЬреЛ рдбрд╛рдпрдиреЗрдорд┐рдХрдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдпрд╛ рдХреНрд╖реЗрддреНрд░ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдкреНрд░рдХрд╛рд░, рд╕рд╛рде рд╣реА рдЯреНрд░рд╛рдЗрдХреЛрд╡рд░реНрде рд╡рд┐рдзрд┐ - рдЬрд┐рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЯрд╛рдЗрдк рдХреЛ рдбрд╛рдпрдирд╛рдорд┐рдХ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЯрд╛рдЗрдк, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рди = рдбрд╛рдпрдирд╛рдорд┐рдХрдСрдмреНрдЬреЗрдХреНрдЯ ред

public class DynamicXElementReader : DynamicObject
{
// not used
private XElement element;
public static dynamic CreateInstance( XElement ) { return null ;}

/// <summary>
/// :
/// SomeType variable = dynamicElement;
/// </summary>
public override sealed bool TryConvert(ConvertBinder binder, out object result)
{
// XElement
// xml-
if (binder.ReturnType == typeof ( XElement ))
{
result = element;
return true ;
}

//
//
string underlyingValue = element.Value;
result = Convert .ChangeType(underlyingValue, binder.ReturnType,
CultureInfo.InvariantCulture);

return true ;
}

/// <summary>
///
/// </summary>
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
string binderName = binder.Name;
Contract.Assume(binderName != null );

// ,
//
XElement subelement = element.Element(binderName);
if (subelement != null )
{
result = CreateInstance(subelement);
return true ;
}

// ,
//
return base .TryGetMember(binder, out result);
}

}


* This source code was highlighted with Source Code Highlighter .


рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, TryConvert рд╡рд┐рдзрд┐ рдХреЛ рддрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЛ xml рддрддреНрд╡ рдпрд╛ рдЙрд╕рдХреЗ рдХрд┐рд╕реА рдЙрдкрд╢реАрд░реНрд╖ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреВрдБрдХрд┐ рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд░реНрддрдорд╛рди xml рддрддреНрд╡ рдХрд╛ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЛ Convert рд╡рд░реНрдЧ рдХреЗ ChangeType рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИ; рдПрдХрдорд╛рддреНрд░ рдЕрдкрд╡рд╛рдж XElement рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЬрд┐рд╕реЗ рдЕрд▓рдЧ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рд╕реАрдзреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд XElement рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред

TryGetMember рд╡рд┐рдзрд┐ рднреА рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдЙрд╕ рд╕рджрд╕реНрдп рдХрд╛ рдирд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рддрддреНрд╡ рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрджрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рддрддреНрд╡ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд╢реЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред рдЕрдиреНрдпрдерд╛, рд╣рдо рдЖрдзрд╛рд░ рд╕рдВрд╕реНрдХрд░рдг рдХрд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рд░рдирдЯрд╛рдЗрдо рдЕрдкрд╡рд╛рдж рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдзрд┐рдд рд╕рджрд╕реНрдп рдирд╣реАрдВ рдорд┐рд▓рд╛ред

рдпрд╣ рд╕рдм рдЖрдкрдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╢реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

// bookXElement
string firstBooksElement = dynamicElement.book;
Console .WriteLine( "First books element: {0}" , firstBooksElement);

//
string firstBooksTitle = dynamicElement.book.title;
Console .WriteLine( "First books title: {0}" , firstBooksTitle);

// int
int firstBooksPageCount = dynamicElement.book.pages;
Console .WriteLine( "First books page count: {0}" , firstBooksPageCount);


* This source code was highlighted with Source Code Highlighter .


рдЗрд╕ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо:

First books element: < book >
< title > Mortal Engines </ title >
< author name ="Philip Reeve" />
< pages > 347 </ pages >
</ book >

First books title: Mortal Engines
First books page count: 347
First books author: Philip Reeve
Second books title: The Talisman


* This source code was highlighted with Source Code Highlighter .


XML рдбреЗрдЯрд╛ рдмрдирд╛рдиреЗ / рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдЧрддрд┐рд╢реАрд▓" рд╢реЗрд▓ рдмрдирд╛рдирд╛


рджреЛ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ, рдбреЗрдЯрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рджреВрд╕рд░рд╛ рдмрдирд╛рдиреЗ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ TryGetMember рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╣рдо рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рджрд╕реНрдп рддрдХ рдХреНрдпреЛрдВ рдкрд╣реБрдБрдЪрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрджрд┐ рдпрд╣ рдХреЙрд▓ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рддрддреНрд╡ рд╕реНрд░реЛрдд рдПрдХреНрд╕рдПрдордПрд▓ рдбреЗрдЯрд╛ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рддрд╛рд░реНрдХрд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрдирд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╛рдо рд╡рд╛рд▓рд╛ рддрддреНрд╡ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдпрд╣ рд╣реИ рдХрд┐ рдбрд╛рдпрдирд╛рдорд┐рдХрдПрдХреНрд╕рдПрдореЗрдВрдЯрд░реАрдбрд░ рд╢реНрд░реЗрдгреА рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ ред рд╣рд╛рд▓рд╛рдБрдХрд┐, XML рдбреЗрдЯрд╛ рдмрдирд╛рддреЗ / рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╕рдордп рд╣рдореЗрдВ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдЦрд╛рд▓реА рддрддреНрд╡ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ; рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рдХрд╛рдлреА рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ рдХрд┐ рдмрдирд╛рдП рдЧрдП рддрддреНрд╡ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╛рдо рдХреЗ рд╕рд╛рде рддрддреНрд╡ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╛ рдмрд▓реНрдХрд┐, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ) рд╣реЛрдЧрд╛ред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЙрдкрд░реНрдпреБрдХреНрдд рд░реАрдб-рдУрдирд▓реА рдбрд╛рдпрдиреЗрдорд┐рдХ рдИ - рдХреНрд▓реАрдпрд░ рд░рд╛рдЗрдбрд░ рд╡рд░реНрдЧ рдореЗрдВ, рд╣рдо рдПрдХ рдФрд░ рдПрдХ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ - рдбрд╛рдпрдиреЗрдорд┐рдХрдПрдХреНрд╕ рдПрд▓рд┐рдореЗрдВрдЯрд╡рд░реНрдЯрд░ , рдЬрд┐рд╕рдХрд╛ рдХрд╛рд░реНрдп XML рдбреЗрдЯрд╛ рдмрдирд╛рдирд╛ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЪреВрдВрдХрд┐ рджреЛрдиреЛрдВ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд╕рдорд╛рди рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯреНрд░рд╛рдЗрдХреЙрдирд╡рд░реНрдЯ рдкрджреНрдзрддрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рд╕рд╛рде рд╣реА рд╕рд╛рде рдХреБрдЫ рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐рдпрд╛рдБ, рдЬреИрд╕реЗ рдХрд┐ рд╣реИрд╕рдкреЗрдВрдЯ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдореЗрдВ рдПрдХ рдЕрдиреНрдп рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ рдбрд╛рдЗрдиреЗрдорд┐рдХрдПрдХреНрд╕рдПрд▓реЗрдЯрдореЗрдВрдЯрдмреЗрд╕ рд╣реЛрддрд╛ рд╣реИ , рдЬреЛ рдХреЛрдб рдХреЗ рджреЛрд╣рд░рд╛рд╡ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╡рдВрд╢рдЬреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЪреВрдВрдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдпрд╣рд╛рдВ рдирд╣реАрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред

XML рдбреЗрдЯрд╛ рдмрдирд╛рдиреЗ / рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдбрд╛рдпрдиреЗрдорд┐рдХ рд╢реЗрд▓ рдореЗрдВ рдореБрдЦреНрдп рдЕрдВрддрд░ рджреЛ рдЗрдВрдбреЗрдХреНрд╕рд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд░реНрд╕ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реИ: рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рди рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рджреВрд╕рд░рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдПред рджреВрд╕рд░рд╛ рдЕрдВрддрд░ рджреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЧреИрд░-рдЧрддрд┐рд╢реАрд▓ рддрд░реАрдХреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реИ: SetValue рдФрд░ SetAttributeValue , рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рдФрд░ рдЙрд╕рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

public class DynamicXElementWriter : DynamicObject
{
// ,

/// <summary>
///
/// </summary>
public void SetValue( object value )
{
Contract.Requires( value != null );

element.SetValue( value );
}

/// <summary>
///
/// </summary>
public void SetAttributeValue(XName name, object value )
{
Contract.Requires(name != null );
Contract.Requires( value != null );

element.SetAttributeValue(name, value );
}

/// <summary>
///
/// </summary>
public dynamic this [XName name]
{
get
{
//
}

set
{
//
// XElement.SetAttributeValue,
element.SetAttributeValue(name, value );
}

}

/// <summary>
/// ""
/// </summary>
public dynamic this [ int idx]
{
get
{
//
Contract.Requires(idx >= 0, "Index should be greater or equals to 0" );
Contract.Requires(idx == 0 || HasParent(),
"For non-zero index we should have parent element" );

//
if (idx == 0)
return this ;

// "" .
// ,
var parent = element.Parent;
Contract.Assume(parent != null );

// "" ,
//
XElement subElement = parent.Elements(element.Name).ElementAtOrDefault(idx);
if (subElement == null )
{
XElement sibling = parent.Elements(element.Name).First();
subElement = new XElement (sibling.Name);
parent.Add(subElement);
}

return CreateInstance(subElement);
}

set
{
Contract.Requires(idx >= 0, "Index should be greater or equals to 0" );
Contract.Requires(idx == 0 || HasParent(),
"For non-zero index we should have parent element" );

//
// ,
//
dynamic d = this [idx];
d.SetValue( value );
return ;
}

}
}


* This source code was highlighted with Source Code Highlighter .


рдЧреЗрдЯрд░реНрд╕ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд┐рдЫрд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рдорд╛рди рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдЬреЛ рдПрдХреНрд╕рдирд╛рдо рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЬреЛ рдкреВрд░реНрдгрд╛рдВрдХ рд▓реЗрддрд╛ рд╣реИ, рдХреБрдЫ рд╣рдж рддрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рддрддреНрд╡ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд "рднрд╛рдИ" рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдПрдХ рдЧреЗрдЯрд░ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рд╣реЛрддреЗ рд╣реИрдВред рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдмрд╕рдиреЗ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рдлреА рддреБрдЪреНрдЫ рд╣реИред

рдПрдХ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рдЯреНрд░рд╛рдЗрдЧреЗрдЯ рдореЗрдореНрдмрд░ рд╡рд┐рдзрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рд╕рд╛рде рд╣реА рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЯреНрд░рд╛рдЗрд╕реЗрдореЗрдореНрдмрд░ рд╡рд┐рдзрд┐ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реИ, рдЬрд┐рд╕реЗ рддрдм рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рддрддреНрд╡ рдХрд╛ xml рдорд╛рди рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: dynamElement.SubElement = value ред

/// <summary>
///
/// </summary>
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
string binderName = binder.Name;
Contract.Assume(binderName != null );

//
XElement subelement = element.Element(binderName);

// ,
//
if (subelement == null )
{
subelement = new XElement (binderName);
element.Add(subelement);
}

result = CreateInstance(subelement);
return true ;
}

/// <summary>
///
/// </summary>
public override bool TrySetMember(SetMemberBinder binder, object value )
{
Contract.Assume(binder != null );
Contract.Assume(! string .IsNullOrEmpty(binder.Name));
Contract.Assume( value != null );

string binderName = binder.Name;

// ,
// , ;
// XElement.SetElementValue,
//
if (binderName == element.Name)
element.SetValue( value );
else
element.SetElementValue(binderName, value );
return true ;
}


* This source code was highlighted with Source Code Highlighter .


TryGetValue рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмреАрдЪ рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдореВрд▓ xml рдкреЗрдбрд╝ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рдЙрдк рддрддреНрд╡ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╕рдордп, рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рддрддреНрд╡ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред TrySetMember рдкрджреНрдзрддрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреА рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ рдХрд┐ XElement.SetElementValue рд╡рд┐рдзрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рднреА рдЧрдВрджреЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдЬреЛ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рд╡рд╛рдВрдЫрд┐рдд рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рддрддреНрд╡ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред

рдирд┐рд╖реНрдХрд░реНрд╖


рдореИрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдмрд╛рд╣рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ рдпрд╛ рдЗрд╕ рдпрд╛ рдЙрд╕ рдкреНрд░рд╢реНрди рдореЗрдВ рд╕рд╣реА рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд▓реЗрдЦ рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЧрддрд┐рд╢реАрд▓ рдЧреЛрд▓реЗ рдмрдирд╛рдиреЗ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд╛рднреЛрдВ рдХреЛ C # рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рдирд╛ рд╣реИред рдФрд░ рдпрджреНрдпрдкрд┐ рджрд┐рдП рдЧрдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрджрд░реНрд╢ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХреБрдЫ рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рднрд╛рдЧ рд▓реЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЬреАрдердм рдкрд░ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИ, рдФрд░ рдЖрдк рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ (рд╕рд╛рде рд╣реА рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди) рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреЗ рд╡рд┐рд╡реЗрдХ рд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдбрд╛рдпрдиреЗрдорд┐рдХрдПрдХреНрд╕рдПрдордПрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рд╕реЛрд░реНрд╕ рдХреЛрдб рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИ ред

- (*) рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ DLR - рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓реИрдВрдЧреНрд╡реЗрдЬ рд░рдирдЯрд╛рдЗрдо рдХрд╛ рд░рдирдЯрд╛рдЗрдо рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдПрдХ "рд░реЗрдЧреБрд▓рд░" рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкреЗрдбрд╝реЛрдВ рдХреЛ рдЪрд╛рд▓рд╛рдХреА рд╕реЗ рдХрд╛рдЯрддреА рд╣реИред

(**) рдЗрд╕ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ рдФрд░ рдпрд╣рд╛рдБ ред

(***) рдпрд╣ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдЬреЙрди рд╕реНрдХреАрдЯ рдиреЗ рдЕрдкрдиреА рдкреБрд╕реНрддрдХ "рд╕реА # рдЗрди рдбреЗрдкреНрде", 2 рдбреА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред

Source: https://habr.com/ru/post/In119036/


All Articles