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

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


рдмреНрд▓реЙрдЧ рдореЗрдВ рдореВрд▓

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


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


рдпрд╣рд╛рдБ рд╣рдореЗрдВ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдЯрд░реНрди рдХрд╛ рдПрдХ рд╕рд░рд▓ 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"; } } 

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


рдкрд╣рд▓реЗ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХрдИ switch рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ case рдмреЙрдбреА рдХреЗ рднреАрддрд░ рдЬреНрдпрд╛рджрд╛ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЕрдХреНрд╕рд░ рд╡реЗ рд╕рднреА рдХреЗрд╡рд▓ рдПрдХ рдореВрд▓реНрдп рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рддреЛ рдЗрд╕реЗ рдПрдХ рдЪрд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдпрд╛ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдХреЗ (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░)ред рдЙрди рд╕рднреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреНрд▓рдВрдХреА рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 5-рджрд╢рдХ рдкреБрд░рд╛рдиреА рднрд╛рд╖рд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдорд╛рд░реЛрд╣ рд╣реИред


рд╣рдордиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ switch рдХрд╛ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд░реВрдк рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдордп рдерд╛ред рдпрд╣рд╛рдБ рдпрд╣ рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ:


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

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


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

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


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


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

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


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


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


рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреА рдмрд╛рдд рдХрд░реЗрдВ, рддреЛ рдкреИрдЯрд░реНрди рдЕрдЪрд╛рдирдХ рд╕реНрд╡рд┐рдЪ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рдмрд╕реЗ рднрд╛рд░реА рддрддреНрд╡ рдмрди рдЧрдП рд╣реИрдВ! рдЪрд▓рд┐рдП рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд░рддреЗ рд╣реИрдВред


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


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" }; 

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


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


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


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

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


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

{} рд╢реЗрд╖ рдиреЙрдирдмреЙрд▓ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ null рдХреЛ null рдорд┐рд▓рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рд╕рдВрдкреВрд░реНрдг рд╣реИ рдФрд░ рд╕рдВрдХрд▓рдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧрд┐рд░рдиреЗ рд╡рд╛рд▓реЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред


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


рдкреНрд░реЙрдкрд░реНрдЯреА рдкреИрдЯрд░реНрди рдиреЗ рджреВрд╕рд░реЗ Point рдорд╛рдорд▓реЗ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдареАрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рд╡рд╣рд╛рдБ рдкрд░реЗрд╢рд╛рдиреА рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдЕрдзрд┐рдХ рд╣реИ рдЬреЛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ Point рдХреНрд▓рд╛рд╕ рдореЗрдВ рдПрдХ Deconstruct рд╡рд┐рдзрд┐ рд╣реИ, рдПрдХ рддрдерд╛рдХрдерд┐рдд рдбрд┐рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ ред C # 7.0 рдореЗрдВ, deconstructors рдиреЗ рдорд╛рди рдХреЛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдкрд░ deconstructed рд╣реЛрдиреЗ рджрд┐рдпрд╛, рддрд╛рдХрд┐ рдЖрдк рд▓рд┐рдЦ рд╕рдХреЗрдВ рдЬреИрд╕реЗ:


 (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" }; 

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


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


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


рд╕реНрдерд┐рддрд┐ рдкреИрдЯрд░реНрди рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рддрдм рд╣реИ рдЬрдм рдЙрдиреНрд╣реЗрдВ рдЯреБрдкрд▓реНрд╕ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЛ рд╕реАрдзреЗ рдЯреБрдкрд▓ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдХреЛрд╖реНрдардХ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрдЯ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рднреА рджреЗрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ switch (x, y, z) рдмрдЬрд╛рдп switch ((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") }; 

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


 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") }; 

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


рдЕрдиреНрдп C # 8.0 рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 2 рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдПрдБ


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


рдШреЛрд╖рдгрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


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


 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 

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


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


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


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


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


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


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


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


Async рдзрд╛рд░рд╛рдУрдВ


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


рдЗрд╕ рдкрд░ рд╣реИ!


рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╣рдо рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реИрдВ! рдХреГрдкрдпрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирдП рдкреИрдЯрд░реНрди рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЦреЗрд▓реЗрдВред рдХреНрдпрд╛ рдЖрдк рдИрдВрдЯ рдХреА рджреАрд╡рд╛рд░реЛрдВ рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВ? рдХреБрдЫ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИ? рдЖрдкрдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╢рд╛рдВрдд рдФрд░ рдЙрдкрдпреЛрдЧреА рдкрд░рд┐рджреГрд╢реНрдп рдХреНрдпрд╛ рд╣реИрдВ? рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдмрдЯрди рджрдмрд╛рдПрдВ рдФрд░ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ!


рд╣реИрдкреНрдкреА рд╣реИрдХрд┐рдВрдЧ


Mads Torgersen, C # рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рд▓реАрдб

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


All Articles