C # 8.0 рдореЗрдВ рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдПрдБ

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2019 рдкреНрд░реАрд╡реНрдпреВ 2 рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде, рдЕрддрд┐рд░рд┐рдХреНрдд C # 8.0 рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЖрдЬрд╝рдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдирдореВрдиреЗ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдВрдд рдореЗрдВ рдореИрдВ рдХреБрдЫ рдЕрдиреНрдп рд╕рдорд╛рдЪрд╛рд░реЛрдВ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рд╕реНрдкрд░реНрд╢ рдХрд░реВрдВрдЧрд╛ред


рдпрд╣ рд▓реЗрдЦ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рд╣реИред




рд╣рдорд╛рд░реЗ MSP, рд▓реЗрд╡ рдмреБрд▓рд╛рдиреЛрд╡ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдЕрдзрд┐рдХ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдЕрдзрд┐рдХ рдкреИрдЯрд░реНрди


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


рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ C # 7.0 рдкреИрдЯрд░реНрди рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:


class Point { public int X { get; } public int Y { get; } public Point(int x, int y) => (X, Y) = (x, y); public void Deconstruct(out int x, out int y) => (x, y) = (X, Y); } static string Display(object o) { switch (o) { case Point p when pX == 0 && pY == 0: return "origin"; case Point p: return $"({pX}, {pY})"; default: return "unknown"; } } 

рднрд╛рд╡ рдмрджрд▓реЗрдВ


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХрдИ рд╕реНрд╡рд┐рдЪ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдорд╛рдорд▓реЗ рдирд┐рдХрд╛рдпреЛрдВ рдореЗрдВ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЕрдХреНрд╕рд░ рд╡реЗ рд╕рднреА рдмрд╕ рдПрдХ рдореВрд▓реНрдп рдмрдирд╛рддреЗ рд╣реИрдВ, рдпрд╛ рддреЛ рдЗрд╕реЗ рдПрдХ рдЪрд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдпрд╛ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдХреЗ (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдЗрди рд╕рднреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рд╕реНрд╡рд┐рдЪ рдЬрдЧрд╣ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛрдиреЗ рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдкрдЪрд╛рд╕ рд╡рд░реНрд╖реАрдп рднрд╛рд╖рд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рдорд╛рди рд╣реИред


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


 static string Display(object o) { return o switch { Point p when pX == 0 && pY == 0 => "origin", Point p => $"({pX}, {pY})", _ => "unknown" }; } 

рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрджрд▓ рдЧрдИ рд╣реИрдВред рдЖрдЗрдП рдЙрдиреНрд╣реЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ:


  • рд╕реНрд╡рд┐рдЪ рдХреАрд╡рд░реНрдб рдкрд░реАрдХреНрд╖рдг рдореВрд▓реНрдп рдФрд░ {...} рдорд╛рдорд▓реЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рдмреАрдЪ "infix" рд╣реИред рдпрд╣ рдЕрдиреНрдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕рдВрд░рдЪрд┐рдд рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╕реЗ рдиреЗрддреНрд░рд╣реАрди рднреЗрдж рдХрд░рдиреЗ рдореЗрдВ рднреА рдЖрд╕рд╛рди рд╣реИред
  • рдХреЗрд╕ рдХреАрд╡рд░реНрдб рдФрд░ рд╕рд┐рдВрдмрд▓: рдХреЛ рд▓реИрдореНрдмреНрдбрд╛ рдПрд░реЛ => рдХреЗ рд▓рд┐рдП рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
  • рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЛ _ рд░реАрд╕реЗрдЯ рдкреИрдЯрд░реНрди рджреНрд╡рд╛рд░рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
  • рдирд┐рдХрд╛рдп рднрд╛рд╡ рд╣реИрдВред рдЪрдпрдирд┐рдд рдирд┐рдХрд╛рдп рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдмрди рдЬрд╛рддрд╛ рд╣реИред

рдХреНрдпреЛрдВрдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЕрдкрд╡рд╛рдж рдХрд░рдирд╛ рдпрд╛ рдлреЗрдВрдХрдирд╛ рдЪрд╛рд╣рд┐рдП, рдПрдХ рдЪрдпрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЬреЛ рдПрдХ рдореИрдЪ рдХреЗ рдмрд┐рдирд╛ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджреЗрдЧреАред рд╕рдВрдХрд▓рдХ рдЖрдкрдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЛ рдХреИрдЪ-рдСрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╕рднреА рдЪреБрдирд┐рдВрджрд╛ рдХрдердиреЛрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред


рдЪреВрдБрдХрд┐ рд╣рдорд╛рд░реА рдкреНрд░рджрд░реНрд╢рди рдкрджреНрдзрддрд┐ рдореЗрдВ рдЕрдм рдПрдХрд▓ рд╡рд╛рдкрд╕реА рд╡рд┐рд╡рд░рдг рд╣реИ, рд╣рдо рдЗрд╕реЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


  static string Display(object o) => o switch { Point p when pX == 0 && pY == 0 => "origin", Point p => $"({pX}, {pY})", _ => "unknown" }; 

рдЬреЛ рднреА рд╕реНрд╡рд░реВрдкрдг рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рджреА рдЧрдИ рд╣реИрдВ, рд╡реЗ рдмреЗрд╣рдж рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред Brevity рдЖрдкрдХреЛ рдПрдХ "рд╕рд╛рд░рдгреАрдмрджреНрдз" рддрд░реАрдХреЗ рд╕реЗ рд╕реНрд╡рд┐рдЪ рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдПрдХ рд╣реА рд▓рд╛рдЗрди рдкрд░ рдкреИрдЯрд░реНрди рдФрд░ рдЪреЛрд▓реА рдХреЗ рд╕рд╛рде, рдФрд░ => рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдиреАрдЪреЗ рдкрдВрдХреНрддрд┐рдмрджреНрдзред


рд╡реИрд╕реЗ, рд╣рдо рдЕрдВрддрд┐рдо рдХреЗрд╕ рдХреЗ рдмрд╛рдж рдХреЙрдорд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЕрдиреНрдп рд╕рднреА "рд╕реА # рдореЗрдВ рдХреЙрдорд╛ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде" рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд▓реЗрдХрд┐рди рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 2 рдореЗрдВ рдЕрднреА рддрдХ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред


рдкреИрдЯрд░реНрди рдХреЗ рдЧреБрдг


рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреА рдмрд╛рдд рдХрд░реЗрдВ, рддреЛ рдкреИрдЯрд░реНрди рдЕрдЪрд╛рдирдХ рдкрд╕рдВрдж рднрд╛рд╡ рдХреЗ рд╕рдмрд╕реЗ рдХрдард┐рди рддрддреНрд╡ рдмрди рдЬрд╛рддреЗ рд╣реИрдВред рдЪрд▓реЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд░рддреЗ рд╣реИрдВред


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


C # 8.0 рдореЗрдВ, рд╣рдо рдЕрддрд┐рд░рд┐рдХреНрдд рд╡реИрдХрд▓реНрдкрд┐рдХ рддрддреНрд╡реЛрдВ рдХреЛ рдкреИрдЯрд░реНрди рдХреЗ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬреЛ рдкреИрдЯрд░реНрди рдХреЛ рдЙрд╕ рдореВрд▓реНрдп рдореЗрдВ рдЧрд╣рд░рд╛рдИ рддрдХ рдЬрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдкреИрдЯрд░реНрди рдкрд░ рдореИрдк рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЙрдкрд▓рдмреНрдз рдЧреБрдгреЛрдВ рдпрд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдорд╛рдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реБрдП, рдиреЗрд╕реНрдЯреЗрдб рдкреИрдЯрд░реНрди рд╡рд╛рд▓реЗ {...} рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдЗрд╕реЗ рд╕рдВрдкрддреНрддрд┐ рдкреИрдЯрд░реНрди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╣рдореЗрдВ рдирд┐рдореНрди рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:


 static string Display(object o) => o switch { Point { X: 0, Y: 0 } p => "origin", Point { X: var x, Y: var y } p => $"({x}, {y})", _ => "unknown" }; 

рджреЛрдиреЛрдВ рдорд╛рдорд▓реЗ рдЕрднреА рднреА рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдУ рдкреНрд╡рд╛рдЗрдВрдЯ рд╣реИ ред рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдирд┐рд░рдВрддрд░ 0 рдХрд╛ рдкреИрдЯрд░реНрди рд╡реИрд░рд┐рдПрдмрд▓ p рдХреЗ рдЧреБрдг X рдФрд░ Y рдкрд░ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рдЬрд╛рдБрдЪ рдХрд░ рдХрд┐ рдХреНрдпрд╛ рдЙрдирдХрд╛ рдпрд╣ рдорд╛рди рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдЗрд╕ рдФрд░ рдЕрдиреНрдп рд╕рдорд╛рди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрдм рд╣рд╛рд▓рдд рдХреЛ рдЦрддреНрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, X рдФрд░ Y рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рд╡реИрд░ рдкреИрдЯрд░реНрди рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ ред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ C # 7.0 рдореЗрдВ рд╡реЗрд░рд┐рдПрдВрдЯ рдкреИрдЯрд░реНрди рд╣рдореЗрд╢рд╛ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдмрд╕ рд╡реИрд▓реНрдпреВ рдХреЛ рд╣реЛрд▓реНрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╡реЗрд░рд┐рдПрдмрд▓ рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рддреЛ x рдФрд░ y рдореЗрдВ pX рдФрд░ pY рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░ рдорд╛рди рд╣реИрдВред


рд╣рдо рдХрднреА рднреА рдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдпрд╣рд╛рдВ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:


  Point { X: 0, Y: 0 } => "origin", Point { X: var x, Y: var y } => $"({x}, {y})", _ => "unknown" 

рд╕рдВрдкрддреНрддрд┐ рдкреИрдЯрд░реНрди рд╕рд╣рд┐рдд рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреИрдЯрд░реНрди рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рдд рд╕рдорд╛рди рд╣реИ, рдпрд╣ рдПрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдореВрд▓реНрдп рдЧреИрд░-рд╢реВрдиреНрдп рд╣реЛред рдпрд╣ рдХреЙрдореНрдкреИрдХреНрдЯ "рдЧреИрд░-рд╢реВрдиреНрдп" рдкреИрдЯрд░реНрди рдХреЗ рд░реВрдк рдореЗрдВ "рдЦрд╛рд▓реА" рдЧреБрдгреЛрдВ {} рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдЦреЛрд▓рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЛ рдорд╛рдорд▓реЛрдВ рдХреЗ рд╕рд╛рде рдЧрд┐рд░рд╛рд╡рдЯ рдХреА рдЬрдЧрд╣ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ:


  {} => o.ToString(), null => "null" 

{} рд╢реЗрд╖ рдЧреИрд░-рд╢реВрдиреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рд╕реМрджрд╛, рдФрд░ рд╢реВрдиреНрдп рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рд╕рдВрдкреВрд░реНрдг рд╣реИ, рдФрд░ рд╕рдВрдХрд▓рдХ рд▓рд╛рдкрддрд╛ рдорд╛рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред


рд╕реНрдерд┐рддрд┐ рдкреИрдЯрд░реНрди


рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдкреИрдЯрд░реНрди рджреВрд╕рд░реЗ рдмрд┐рдВрджреБ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдЫреЛрдЯрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ред рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдЖрдк рдФрд░ рднреА рдЕрдзрд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреНрд╡рд╛рдЗрдВрдЯ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдПрдХ рдбрд┐рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯ рд╡рд┐рдзрд┐ рд╣реИ, рддрдерд╛рдХрдерд┐рдд рдбрд┐рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ред C # 7.0 рдореЗрдВ, рдбрд┐рдХреЙрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдЖрдкрдХреЛ рдЕрд╕рд╛рдЗрди рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдПрдХ рдореВрд▓реНрдп рдХреЛ "рдбрд┐рдХреЙрдиреНрд╕реНрдЯреНрд░рдХреНрдЯ" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:


 (int x, int y) = GetPoint(); // split up the Point according to its deconstructor 

C # 7.0 рдиреЗ рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдбрд┐рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдХреЛ рдПрдХреАрдХреГрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдпрд╣ рд╕реНрдерд┐рддрд┐рдЧрдд рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдмрджрд▓рддрд╛ рд╣реИ, рдЬреЛ C # 8.0 рдореЗрдВ рдкреИрдЯрд░реНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реАрдХрд╛ рд╣реИред рдпрджрд┐ рдорд┐рд▓рд╛рди рдкреНрд░рдХрд╛рд░ рдПрдХ рдЯрдкрд▓ рдкреНрд░рдХрд╛рд░ рд╣реИ рдпрд╛ рдЗрд╕рдореЗрдВ рдПрдХ рдбрд┐рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реИ, рддреЛ рд╣рдо рдЧреБрдгреЛрдВ рдХрд╛ рдирд╛рдо рд▓рд┐рдП рдмрд┐рдирд╛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдкреИрдЯрд░реНрди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрдореНрдкреИрдХреНрдЯ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд┐рддреАрдп рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 static string Display(object o) => o switch { Point(0, 0) => "origin", Point(var x, var y) => $"({x}, {y})", _ => "unknown" }; 

рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд╡рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдбрд┐рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдиреЗрд╕реНрдЯреЗрдб рдкреИрдЯрд░реНрди рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдореВрд▓реНрдпреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред


Deconstructors рд╣рдореЗрд╢рд╛ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдЙрди рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд╣рд╛рдВ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдХреМрди рд╕рд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреЙрдЗрдВрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП, рдЖрдк рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкрд╣рд▓рд╛ рдорд╛рди X рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ Y рд╣реИ , рдЗрд╕рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рд╕реНрд╡рд┐рдЪ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕реНрдкрд╖реНрдЯ рдФрд░ рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИред


рдЯрдкрд▓ рдкреИрдЯрд░реНрди


рд╕реНрдереИрддрд┐рдХ рдкреИрдЯрд░реНрди рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рдЯреНрдпреВрдкрд▓реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЖрд╡реЗрджрди рд╣реИред рдпрджрд┐ рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЛ рд╕реАрдзреЗ рдЯреБрдкрд▓ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рд╕реНрд╡рд┐рдЪ рдХреЗ рдмрдЬрд╛рдп рдХреЛрд╖реНрдардХ (x, y, z) рдореЗрдВ рдХреЛрд╖реНрдардХ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрдЯ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ (x, y, z) ред


рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рдЗрдирдкреБрдЯреЛрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЯрдкрд▓ рдкреИрдЯрд░реНрди рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рдпрд╣рд╛рдБ рд░рд╛рдЬреНрдп рдорд╢реАрди рдХрд╛ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ:


 static State ChangeState(State current, Transition transition, bool hasKey) => (current, transition) switch { (Opened, Close) => Closed, (Closed, Open) => Opened, (Closed, Lock) when hasKey => Locked, (Locked, Unlock) when hasKey => Closed, _ => throw new InvalidOperationException($"Invalid transition") }; 

рдмреЗрд╢рдХ, рд╣рдо рдЬрдм рдХреНрд▓реЙрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЯрдкрд▓ рдореЗрдВ рд╣реИрдХреЗ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣ рд╕реНрд╡рд╛рдж рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ:


 static State ChangeState(State current, Transition transition, bool hasKey) => (current, transition, hasKey) switch { (Opened, Close, _) => Closed, (Closed, Open, _) => Opened, (Closed, Lock, true) => Locked, (Locked, Unlock, true) => Closed, _ => throw new InvalidOperationException($"Invalid transition") }; 

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдкреИрдЯрд░реНрди рдФрд░ рд╕реНрд╡рд┐рдЪ рднрд╛рд╡ рд╕реНрдкрд╖реНрдЯ рдФрд░ рдЕрдзрд┐рдХ рдШреЛрд╖рд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рддрд░реНрдХ рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддреЗ рд╣реИрдВред


рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 2 рдореЗрдВ C # 8.0 рдХреА рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ


рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╡реАрдПрд╕ 2019 рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 2 рдореЗрдВ рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рдХрдИ рдЫреЛрдЯреЗ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ, рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧреА рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рднреА рдорд┐рд▓реЗрдВрдЧреЗред рдореИрдВ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛, рдмрд╕ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рджреЗрдВред


рд╡рд┐рдЬреНрдЮрд╛рдкрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


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

 static void Main(string[] args) { using (var options = Parse(args)) { if (options["verbose"]) { WriteLine("Logging..."); } ... } // options disposed here } 

рдЖрдк рдмрд╕ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ


 static void Main(string[] args) { using var options = Parse(args); if (options["verbose"]) { WriteLine("Logging..."); } } // options disposed here 

рдбрд┐рд╕реНрдкреЛрдЬреЗрдмрд▓ рд░реЗрдлрд░реА рд╕рдВрд░рдЪрдирд╛


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


рд╕реНрдереИрддрд┐рдХ рд╕реНрдерд╛рдиреАрдп рдХрд╛рд░реНрдп


рдпрджрд┐ рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХрд╛ рд╕реНрдерд╛рдиреАрдп рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ "рдХреИрдкреНрдЪрд░рд┐рдВрдЧ" (рд╕рдВрджрд░реНрднрд┐рдд) рдЪрд░ рд╕реЗ рдЬреБрдбрд╝реЗ рд░рдирдЯрд╛рдЗрдо рдХреА рд▓рд╛рдЧрдд рдХреЛ рдХрдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рд╕реНрдереИрддрд┐рдХ рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдЙрди рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рд░реЛрдХ рджреЗрдЧрд╛ рдЬреЛ рдХрд┐ рдПрдиреНрдХреНрд▓реЛрдЬрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдШреЛрд╖рд┐рдд рдХреА рдЧрдИ рд╣реИрдВ - рдЕрдиреНрдп рд╕реНрдерд┐рд░ рд╕реНрдерд╛рдиреАрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░!


рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 1 рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди


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


рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░


рд╣рдордиреЗ рд╕реНрд░реЛрдд рдкрд░ ( #nullable рдФрд░ #pragma рдЪреЗрддрд╛рд╡рдиреА рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕реНрддрд░ рдкрд░ рдЕрд╢рдХреНрдд рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝реЗ рд╣реИрдВред рд╣рдордиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рджрд╕реНрдпрддрд╛ рдХреЛ рднреА рдмрджрд▓рдХрд░ <NullableContextOptions> enable </ NullableContextOptions> рдХрд░ рджрд┐рдпрд╛ рд╣реИ ред


рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдзрд╛рдЧреЗ


рд╣рдордиреЗ IAsyncEnumerable <T> рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд░реВрдк рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ рдЬреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЙрдореНрдореАрдж рд╣реИред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ .NET рдХреЛрд░ 3.0 рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 1 рдореЗрдВ рджрд┐рдП рдЧрдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, .NET рдХреЛрд░ 3.0 рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 2 рдЬрд▓реНрдж рд╣реА рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдпрд╣ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рд▓реМрдЯрд╛рдПрдЧрд╛ред

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


All Articles