рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ C # 3.0 рдореЗрдВ рд╕рдм рдХреБрдЫ рдирдпрд╛

рд╕рдбрд╝рдХ рдкрд░ рдореМрд╕рдо рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдХрд╣реАрдВ рдирд╣реАрдВ рдЧрдпрд╛, рдореИрдВрдиреЗ рдХреБрдЫ рд╡рд┐рдХреГрдд рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ ... рдореИрдВ рдиреАрдЪреЗ рдПрдХ рдЫреЛрдЯреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдХреЛрдб рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВред рдЙрд╕реЗ рдХреНрдпрд╛ рджрд┐рд▓рд╛рд╕рд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП? рдЕрдкрдиреЗ рдЖрдк рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ ...

рдХрд░реНрдо рдХреЛ рдХрдо рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП: рдкреЛрд╕реНрдЯ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдЕрдиреНрдп рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рдЬрд╛рдПрдВред рд╡рд╣ рдПрдХ рдирд┐рдЬреА рдмреНрд▓реЙрдЧ рдкрд░ рд╣реИрдВред рдЖрдЦрд┐рд░рдХрд╛рд░, рдореИрдВ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд░реНрдЪреБрдЕрд▓ рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реВрдВ, рдЗрддрдирд╛ рдХрдареЛрд░ рдордд рдмрдиреЛ ...



рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ ;
System.Collections.Generic рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ ;
System.Linq рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ ;
System.Runtime.Remoting.Messaging рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ ;

рдиреЗрдорд╕реНрдкреЗрд╕ рдлреНрд░реЛрдЬрд╝рд┐рдХ
{
рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдХрд╛рд░реНрдпрдХреНрд░рдо
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЪрд╛рд░реНрдЯ рдлрд░реНрд╕реНрдЯрдЪрд╛рд░реН <TInput> ( рдпрд╣ TInput рдорд╛рди )
рдЬрд╣рд╛рдВ TInput: рд╡рд░реНрдЧ
{
рд╡рд╛рдкрд╕реА рдорд╛рдиред StString () [0];
}

рд╕реНрдерд┐рд░ рд╢реВрдиреНрдп рдореБрдЦреНрдп ()
{
var рддрд░реНрдХ = рдирдИ рд╕реВрдЪреА < string > { "arg_0" , "temp_z" , "arg_1" , "arg_2" };

рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реЙрдХрд░;

рддрд╛рд▓рд╛ (рд▓реЙрдХрд░ = рдирдИ рд╡рд╕реНрддреБ ) ()
{
Console.WriteLine ( "рдкреНрд░рд╛рд░рдВрдн" );

(( рдлрд╝рдВрдХ < string >) () =>
{
рддрд╛рд▓рд╛ (рд▓реЙрдХрд░)
{
var рдкрд░рд┐рдгрд╛рдо = string .Empty;

foreach ( рд╕реНрдЯреНрд░рд┐рдВрдЧ arg in
(рддрд░реНрдХ рдореЗрдВ рддрд░реНрдХ рд╕реЗ
рдЬрд╣рд╛рдБ argEntity.StartsWith ( "arg_" )
argEntity.Substring (4)) рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
{
Console.WriteLine (рдкрд░рд┐рдгрд╛рдо + = arg.FirstChar < string > ());
}

рд╡рд╛рдкрд╕реА рдкрд░рд┐рдгрд╛рдо;
}
}))ред BeginInvoke (
( рдкреНрд░рддрд┐рдирд┐рдзрд┐ (IAsyncResult рдкрд░рд┐рдгрд╛рдо) {
Console.WriteLine (
рдирдИ
{
рд▓реЗрдирде =
((рдлрдВрдХ < string >) ((AsyncResult) рдкрд░рд┐рдгрд╛рдо) редAsyncDelegate)ред
EndInvoke (рдкрд░рд┐рдгрд╛рдо)ред рдЧрддрд┐
} (рдХрдо);
})
рдирдИ рд╡рд╕реНрддреБ ()
);

Console.WriteLine ( "рд╕рдорд╛рдкреНрдд" );

Console.ReadKey ();
}

Console.ReadKey ();
}
}
}

рдиреАрдЪреЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ рдЬреЛ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВ


рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░;
System.Collections.Generic рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░;
System.Linq рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;
System.Runtime.Remoting.Messaging рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░;

рдиреЗрдорд╕реНрдкреЗрд╕ рдлреНрд░реЛрдЬрд╝рд┐рдХ
{
рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдХрд╛рд░реНрдпрдХреНрд░рдо
{
// рдореЗрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ рд╕рднреА рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдПрдВ
// рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдореЗрд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реИ
// рдЕрдзрд┐рдХ рднреНрд░рдорд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдПред
// рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ:
// рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХрд┐рд╕реА рднреА рдорд╛рдирдХ рдпрд╛ рдЧреИрд░-рдорд╛рдирдХ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд╡реЗ рдереЗ
// рдХреЛ рдХрдХреНрд╖рд╛ рдореЗрдВ рд╣реА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЖрдЧреЗ рдореИрдВ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ
// рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП arg.FirstChar <string> ()
// рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЪрд╛рд░реНрдЯ рдлрд░реНрд╕реНрдЯрдЪрд╛рд░реН <TInput> (рдпрд╣ TInput рдорд╛рди)
// рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ - рдЬреЗрдиреЗрд░рд┐рдХ рдкреНрд░рдХрд╛рд░ C # 2.0 рдФрд░ .net 2.0 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ
рдЬрд╣рд╛рдВ TInput: рд╡рд░реНрдЧ
{
рд╡рд╛рдкрд╕реА рдорд╛рдиред StString () [0];
}

рд╕реНрдерд┐рд░ рд╢реВрдиреНрдп рдореБрдЦреНрдп ()
{
// рдЗрдиреЛрд╡реЗрд╢рди - рдРрдб рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП, рдЖрдк рдмрд╕ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
// рдЬрдм рдПрдХ рдРрд▓рд╛рди рдХреА рдШреЛрд╖рдгрд╛ рдХреАред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рднреА, рддрд░реНрдХ рдкреНрд░рдХрд╛рд░ рд╕реВрдЪреА <string> рдХреЗ рд╣реЛрдВрдЧреЗ,
// intellisense рдЗрд╕реЗ рд╕рдордЭреЗрдЧрд╛ рдФрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
var рддрд░реНрдХ = рдирдИ рд╕реВрдЪреА <string> {"arg_0", "temp_z", "arg_1", "arg_2"};

рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реЙрдХрд░;

рддрд╛рд▓рд╛ (рд▓реЙрдХрд░ = рдирдИ рд╡рд╕реНрддреБ) ()
{
Console.WriteLine ("рдкреНрд░рд╛рд░рдВрдн");

// рд▓рдВрдмреЛрджрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рдЧреБрдордирд╛рдо рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╣реИред рдорд╛рдирдХ рдкреНрд░рдХрд╛рд░
// рдлрдВрдХ (рд░рд┐рдЯрд░реНрди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди) рдЖрдк рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
// рдЬреЛ рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИрдВ
// рд▓рдВрдмреЛрджрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЕрдирд╛рдо рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
// (рдкреНрд░рддрд┐рдирд┐рдзрд┐) ()
((рдлрд╝рдВрдХ <string>) () =>
// рдпрджрд┐ рдХреЛрдИ рдХрд╛рд░реНрдп рдерд╛, рддреЛ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
// Console.WriteLine (((Func <int, int, string>) ((x, y) => (x + y)ред ToString ()) (5, 5));
// рд╣рдо рдПрдХ рд▓реИрдВрдмрдбрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдмрдирд╛рдПрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рдЗрдирдкреБрдЯ рдкрд░ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ 2 рдЕрдВрддрд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрдВ
// рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдФрд░ рдЗрд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ 5 рдФрд░ 5 рдХреЗ рд╕рд╛рде рдХрд╣реЗрдВрдЧреЗред рдЖрдк рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдХрдВрд╕реЛрд▓ рдХреЛ 10 рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЧрд╛
// рдПрдХ рдЧреБрдордирд╛рдо рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдКрдкрд░ рджреА рдЧрдИ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЙрджрд╛рд╣рд░рдг -
// Console.WriteLine (((Func <int, int, string>) (рдбреЗрд▓реАрдЧреЗрдЯ (int x, int y)) {return (x + y) .ToString ();}) (5, 5));
{
// рд▓реИрдВрдмрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рд╕реНрдерд╛рдиреАрдп рдЪрд░ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ
// рдореВрд▓ рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рддрд╛рд▓рд╛ (рд▓реЙрдХрд░)
{
// рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд░рд┐рдгрд╛рдо рдЯрд╛рдЗрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рд╣реЛрдЧрд╛
var result = string.Empty;

foreach (рд╕реНрдЯреНрд░рд┐рдВрдЧ arg in
// рд▓рд┐рдирдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ред рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛ - IEnumerable <string>
// рд╣рдо рдЙрди рд╕рднреА рдореВрд▓реНрдпреЛрдВ рдХреЗ рддрд░реНрдХ рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬреЛ "arg_" рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ
// рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдпрд╛ рд╕реЗ рдХреЗрд╡рд▓ рд╕рдмреНрд╕реНрдЯреНрд░рд┐рдВрдЧ (4) рд▓реЗрддреЗ рд╣реИрдВ
// рдкрд░рд┐рдгрд╛рдоред IEnumerable <string> рд╕реВрдЪреА <string> рдпрд╛ рдореЗрдВ рдмрджрд▓рдирд╛ рдЖрд╕рд╛рди рд╣реИ
// string [], рдЗрд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред ToList () рдпрд╛ ToArray () рдЕрдВрдд рдореЗрдВ
// рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдирд┐рдореНрди рдХреЗ рд╕рдорд╛рди рд╣реИ -
// рддрд░реНрдХред рдХрд╣реАрдВ рднреА ((argEntity) => argEntity.StartsWith ("arg_"))ред
// рдЪреБрдиреЗрдВ ((argEntity) => argEntity.Substring (4))
// рдЖрдк рдпрд╣рд╛рдБ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ - msdn2.microsoft.com/en-us/vcsharp/aa33679.xx
(рддрд░реНрдХ рдореЗрдВ рддрд░реНрдХ рд╕реЗ
рдЬрд╣рд╛рдБ argEntity.StartsWith ("arg_")
argEntity.Substring (4)) рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
{
// рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдкрд╣рд▓реЗ рдЕрдХреНрд╖рд░ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдПрдВ
Console.WriteLine (рдкрд░рд┐рдгрд╛рдо + = arg.FirstChar <string> ());
}

рд╡рд╛рдкрд╕реА рдкрд░рд┐рдгрд╛рдо;
}
}))ред
// рдЪреВрдВрдХрд┐ рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдПрдХ рдЕрдирд╛рдо рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
// рдПрдХ рдЕрд▓рдЧ рдзрд╛рдЧреЗ рдореЗрдВ
рд╢реБрд░реБрдЖрдд
// рдПрдХ рдЕрдирд╛рдо рдбреЗрд▓реАрдЧреЗрдЯ рдмрдирд╛рдПрдВ рдЬрд┐рд╕реЗ рдЕрдиреБрд░реЛрдз рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛,
// рдЗрд╕ рдЬрдЧрд╣ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдВрдмреЛрджрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ
// (рдкрд░рд┐рдгрд╛рдо) => {
(рдкреНрд░рддрд┐рдирд┐рдзрд┐ (IAsyncResult рдкрд░рд┐рдгрд╛рдо) {
Console.WriteLine (
// рдордХреНрдЦреА рдкрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд▓рдВрдмрд╛рдИ рдХреА рд╕рдВрдкрддреНрддрд┐ рд╣реЛ,
// рдпрд╣рд╛рдБ рдХреЗрд╡рд▓ рдФрд░ рдЕрдзрд┐рдХ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдирдИ
{
рд▓реЗрдВрде = ((рдлрдВрдХ <string>) ((AsyncResult) рдкрд░рд┐рдгрд╛рдо) редAsyncDelegate)ред
EndInvoke (рдкрд░рд┐рдгрд╛рдо)ред рдЧрддрд┐
}ред
// рдмреЗрдирд╛рдореА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рд▓реЗрди рджреЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
рд▓рдВрдмрд╛рдИ);
})
рдирдИ рд╡рд╕реНрддреБ ()
);

Console.WriteLine ("рд╕рдорд╛рдкреНрдд");

Console.ReadKey ();
}

Console.ReadKey ();
}
}
}

// рдХреЗрд╡рд▓ рддрд╛рд▓реЗ рд╣реА рдмрдиреЗ рд░рд╣реЗ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рд╕рдордЭрд╛рдпрд╛ рдирд╣реАрдВ, рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдпрд╣ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рд┐рдП ;-)

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


All Articles