C # 8.0 рдФрд░ рд╕реНрдЯреЗрдЯрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░

рдЪрд┐рддреНрд░ 9


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

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

рдирд╡рд╛рдЪрд╛рд░ рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖


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

рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ C # 8.0 рдореЗрдВ рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдХреНрдпрд╛ рд╣реИрдВ? рдпрд╣ рд╡рд╣реА рдЕрдЪреНрдЫрд╛ рдкреБрд░рд╛рдирд╛ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЗрд╕ рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде рдХрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдХреЛ рдЕрдм '?' рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред (рдЙрджрд╛ред рд╕реНрдЯреНрд░рд┐рдВрдЧ? ), рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Nullable <T> рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдЕрд╢рдХреНрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░ (рдЬреИрд╕реЗ int? )ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдм рдПрдХ рд╣реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ '?' рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рдиреЗ рд▓рдЧреА, рдЕрд░реНрдерд╛рддреНред рдпрд╣ рдПрдХ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬрд┐рд╕рдХреЗ рдЪрд░ рдореЗрдВ рд╢реВрдиреНрдп рдорд╛рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред

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

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

рдЖрдк рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрддрд░ рдкрд░ NullableContextOptions рдЧреБрдг рдХреЛ рд╕рдХреНрд╖рдо рдорд╛рди рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдХрд░ рдпрд╛ рдлрд╝рд╛рдЗрд▓ рд╕реНрддрд░ рдкрд░ рдкреВрд░реНрд╡рдкреНрд░рдХреНрд░рдордХ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рдХреЛ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
#nullable enable string cantBeNull = string.Empty; string? canBeNull = null; cantBeNull = canBeNull!; 

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

рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╛рд╡рд┐рдд рдЧрд▓рдд рд╕реВрдЪрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдерд┐рддрд┐ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╢реВрдиреНрдп рд╕реЗ рдЧреБрдЬрд░рдирд╛ рдЕрднреА рднреА рд╕рдВрднрд╡ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирдП рдирд▓-рдХреНрд╖рдорд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдСрдкрд░реЗрдЯрд░ (!) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдпрд╛рдиреА рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдПрдХрд▓ рд╡рд┐рд╕реНрдордпрдмреЛрдзрдХ рдмрд┐рдВрджреБ рдХреА рдорджрдж рд╕реЗ, рдЖрдк рдЙрди рд╕рднреА рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрди рдЪрд░реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдХрд┐рд╕реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрдирд╛рдИ рдЬрд╛рдПрдВрдЧреА:
 #nullable enable String GetStr() { return _count > 0 ? _str : null!; } String str = GetStr(); var len = str.Length; 

рд╣рд╛рдВ, рдпрд╣ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдЧрд▓рдд рд╣реИ, рдФрд░ рдХреЛрдИ рднреА рдРрд╕рд╛ рдХрднреА рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЬрдм рддрдХ рдпрд╣ рдЕрд╡рд╕рд░ рд░рд╣рддрд╛ рд╣реИ, рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рджреНрд╡рд╛рд░рд╛ рд▓рдЧрд╛рдП рдЧрдП рдЕрдиреБрдмрдВрдз рдкрд░ рдХреЗрд╡рд▓ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ (рдпрд╣ рдХрд┐ рдпрд╣ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖ рд╕рдХрддрд╛ рд╣реИ)ред

рдФрд░ рдЖрдк рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЛ рдХрдИ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рдорджрдж рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ! рдХреНрдпреЛрдВрдХрд┐ C # рдЕрдм рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдФрд░ рдпрд╣ рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рд╣реИ):
 cantBeNull = canBeNull!!!!!!!; 

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

рдЗрд╕реА рддрд░рд╣, рдЖрдк рдЬрд╛рдБрдЪ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдЕрд╢рд╛рдВрдд рд╕рдВрджрд░реНрдн рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕рдВрдХрд▓рдХ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 canBeNull!.ToString(); 

рдЖрдк рднрд╛рд╡рдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
 canBeNull!!!?.ToString(); 

рдпрд╣ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдПрдХ рд╢реВрдиреНрдп-рдХреНрд╖рдорд╛рд╢реАрд▓ рдСрдкрд░реЗрдЯрд░ рдбрд╛рд▓рдХрд░ рд╣рдо рд╕рдВрдХрд▓рдХ рдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ: рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рдХреЛрдИ рд╕рддреНрдпрд╛рдкрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдПрдХ рдПрд▓реНрд╡рд┐рд╕ рдСрдкрд░реЗрдЯрд░ рдЬреЛрдбрд╝рддреЗ рд╣реБрдП рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ: рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЖрдЗрдП рджреЗрдЦреЗрдВред

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

рд╡рд╛рдкрд╕ рдЖ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ "рддреЛрдбрд╝" рдХрд░рдирд╛ рдЕрднреА рднреА рд╕рдВрднрд╡ рд╣реИред рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдпрджрд┐ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ, рддреЛ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдШреЛрд╖рд┐рдд рд╡рд┐рдзрд┐ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╕рдордп рдПрдХ рд╕рдВрджрд░реНрдн рдЪрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП , рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП , рдХрд┐рд╕реА рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдВ NullableContextOptions рд╕рдХреНрд╖рдо рд╣реИ , рд╕рдВрдХрд▓рдХ рддрдп рдХрд░реЗрдЧрд╛ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЧреИрд░-рдЕрд╢рдХреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рдФрд░ рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ рджреЗрдЧрд╛ред рдФрд░ рдЗрд╕рдХреА рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ [Nullable (1)] рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж IL рдХреЛрдб рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝реАрд▓реНрдб рдФрд░ рдХреНрд▓рд╛рд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ рдЬреЛрдбрд╝реА рдЧрдИ рдЬрдм Nullable Reference рдХреЗ рдЪрд╛рд▓реВ рд╣реЛрддреЗ рд╣реИрдВ ред рд╡реИрд╕реЗ, рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдЖрдк рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдХреЗрд╡рд▓ рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдЧрд┐рдирддреА рдХрд░реЗрдВ рдЬреЛ рдЖрдкрдиреЗ рдЦреБрдж рдХреЛ рдЬреЛрдбрд╝рд╛ рдерд╛ред

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

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

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ


рд╕реА # рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдбреЗрдЯрд╛рдлреНрд▓реЛ рддрдВрддреНрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рджреМрд░рд╛рди рдЪрд░ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рднреА рдЗрдВрдЯрд░рдкреНрд░реЛрдбреЗрдХреНрдЯрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдпрд╣ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рд╕рдВрднрд╛рд╡рд┐рдд рдореВрд▓реНрдп, рд╕рд╛рде рд╣реА рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рдХрд╣реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рдЖрджрд┐ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЙрди рдЪрд░реЛрдВ рдХреЛ рдпрд╛рдж рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рдВрднрд╡рддрдГ рдЕрд╢рдХреНрдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЪрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд┐рдП рдмрд┐рдирд╛ рдбреЗрд░реЗрдлреЗрд░рд┐рдВрдЧ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ, рддреЛ рдлрд┐рд░ рд╕реЗ, рдпрд╛ рддреЛ рд╡рд░реНрддрдорд╛рди рдХреЛрдб рдореЗрдВ рдЬрд╛рдБрдЪ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рдпрд╛ рдЗрд╕ рдХреЛрдб рдореЗрдВ рдмрддрд╛рдП рдЧрдП рддрд░реАрдХреЗ рдХреЗ рдЕрдВрджрд░, рд╕рдВрднрд╛рд╡рд┐рдд Null рд╕рдВрджрд░реНрдн рдЕрдкрд╡рд╛рдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ V3080 рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреА рдЬрд╛рдПрдЧреАред

рдЗрд╕реА рд╕рдордп, рдЗрд╕ рдирд┐рджрд╛рди рдХрд╛ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗрд╡рд▓ рддрднреА рд╢рдкрде рд▓реЗрдЧрд╛, рдЬрдм рдЙрд╕рдиреЗ рдХрд╣реАрдВ рдЪрд░ рдХреЗ рд▓рд┐рдП рдЕрд╢рдХреНрдд рдХрд╛ рдХрд╛рд░реНрдп рджреЗрдЦрд╛ рдерд╛ред рдЗрд╕ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдФрд░ рд╕рдВрдХрд▓рдХ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдмреАрдЪ рдореБрдЦреНрдп рдЕрдВрддрд░ рд╣реИ рдЬреЛ Nullable Reference рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдПрдирд╛рд▓рд╛рдЗрдЬрд░, рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдЪреВрдХ рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рдЪрд░ рдХреЗ рдХрд┐рд╕реА рднреА рд░реВрдк рдореЗрдВ рд╢рдкрде рдЧреНрд░рд╣рдг рдХрд░реЗрдЧрд╛, рдЬрдм рддрдХ рдХрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ рдПрдирд╛рд▓рд╛рдЗрдЬрд░ рдСрдкрд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ "рдореВрд░реНрдЦ" рд╣реИ! рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ, рдмрд┐рд▓реНрдХреБрд▓ рдХрд┐рд╕реА рднреА рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдк рдЦреБрдж рдХреЛ рдРрд╕рд╛ рд▓рдХреНрд╖реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИ)ред

PVS-Studio рддрднреА рд╢рдкрде рд▓реЗрддрд╛ рд╣реИ, рдЬрдм рд╡рд╣ рдЕрд╢рдХреНрдд (рд╕реНрдерд╛рдиреАрдп рд╕рдВрджрд░реНрдн рдореЗрдВ, рдпрд╛ рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рд╕реЗ рдЖрддрд╛ рд╣реИ) рджреЗрдЦрддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рднрд▓реЗ рд╣реА рдЪрд░ рдПрдХ рдЧреИрд░-рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рдЪрд░ рд╣реИ, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ - рдпрд╣ рдЕрднреА рднреА рд╢рдкрде рд▓реЗрдЧрд╛ рдпрджрд┐ рдпрд╣ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдирд▓ рдЗрд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣рдореЗрдВ рдЕрдзрд┐рдХ рд╕рд╣реА рд▓рдЧрддрд╛ рд╣реИ (рдпрд╛, рдХрдо рд╕реЗ рдХрдо, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ), рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рдЬрд╛рдВрдЪреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╢рдХреНрдд рдЬрд╛рдВрдЪ рдХреЗ рд╕рд╛рде рдкреВрд░реЗ рдХреЛрдб рдХреЛ "рдХрд╡рд░" рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдпрд╣ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рдХреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдорд╛рди рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЗ рд╕рд╛рдеред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдм рдПрдХ рд╣реА рдЧреИрд░-рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рдЪрд░ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ "рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ" рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрднреА рднреА рдЕрд╢рдХреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреБрдк рд░рд╣реЗрдЧрд╛ред рдпрджрд┐ рдирд▓ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЪрд░ рдХреЛ рдмрд┐рдирд╛ рдЬрд╛рдБрдЪ рдХреЗ рдбрд┐рдлрд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╢ V3080 рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИ:
 #nullable enable String GetStr() { return _count > 0 ? _str : null!; } String str = GetStr(); var len = str.Length; <== V3080: Possible null dereference. Consider inspecting 'str' 


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

V3080 [CWE-476] рд╕рдВрднрд╡ рд╢реВрдиреНрдп рд╡рд┐рдзреНрд╡рдВрд╕ рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ред 2 рддрд░реНрдХ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: chainedTupleTypeред Microsoft.CodeAnalysis.CSharp TupleTypeSymbol.cs 244
 NamedTypeSymbol chainedTupleType; if (_underlyingType.Arity < TupleTypeSymbol.RestPosition) { .... chainedTupleType = null; } else { .... } return Create(ConstructTupleUnderlyingType(firstTupleType, chainedTupleType, newElementTypes), elementNames: _elementNames); 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, chainedTupleType рдЪрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рддрдм chainedTupleType рдХреЛ ConstructTupleUnderlyingType рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ Debug.Assert рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд░реЛрд╕рд▓рд┐рди рдореЗрдВ рдпрд╣ рд╕реНрдерд┐рддрд┐ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдбреАрдмрдЧред рдПрд╕реЗрд░ рдХреЛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд░рд┐рд▓реАрдЬ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЕрднреА рднреА ConstructTupleUnderlyingType рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдбреЗрд░реЗрдлрд╝рд░рд┐рдВрдЧ рдХреЛ рдЦрддрд░рдирд╛рдХ рдорд╛рдирддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рд╢рд░реАрд░ рджреЗрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдбреЗрд░реЗрдлреЗрд░рд┐рдВрдЧ рд╣реЛрддреА рд╣реИ:
 internal static NamedTypeSymbol ConstructTupleUnderlyingType( NamedTypeSymbol firstTupleType, NamedTypeSymbol chainedTupleTypeOpt, ImmutableArray<TypeWithAnnotations> elementTypes) { Debug.Assert (chainedTupleTypeOpt is null == elementTypes.Length < RestPosition); .... while (loop > 0) { .... currentSymbol = chainedTupleTypeOpt.Construct(chainedTypes); loop--; } return currentSymbol; } 

рдХреНрдпрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рджрд╛рд╡реЗ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдореНрдпреВрдЯ рдкреЙрдЗрдВрдЯ рд╣реИ (рд╣рдорд╛рд░реЗ рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ), рдХреНрдпреЛрдВрдХрд┐ System.Diagnostics.Contracts рд╕реЗ рдЕрдиреБрдмрдВрдз, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЕрдм рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред рдореИрдВ рдЖрдкрдХреЛ рд╣рдорд╛рд░реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдореЗрдВ рдЙрд╕реА рд░реЛрдЬрд▓рд┐рди рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рдмрддрд╛рдКрдВрдЧрд╛ред рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд╣рдордиреЗ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ , рдФрд░ рдЙрд╕реА рд╕рдордп рд░реЛрд╕рд▓рд┐рди рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рд╕рдВрд╕реНрдХрд░рдг 3 рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ред рдЙрд╕рдХреЗ рдмрд╛рдж, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╕рдордп рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЧрд┐рд░рдирд╛ рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛, рдЬрд┐рд╕ рдкрд░ рдпрд╣ рдкрд╣рд▓реЗ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ред рдЙрд╕реА рд╕рдордп, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЦреБрдж рд░реЛрд╕рд▓рд┐рди рдХреЗ рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рдЧрд┐рд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ - рдПрдХ рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рдеред рдФрд░ рдЖрдЧреЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЬрд┐рд╕ рдЬрдЧрд╣ рдкрд░ рд░реЛрдЬрд▓рд┐рди рдЕрдм рдЧрд┐рд░рддреА рд╣реИ, рдареАрдХ рдКрдкрд░ рдХреА рдПрдХ-рджреЛ рд▓рд╛рдЗрдиреЗрдВ, рдбреЗрдмреНрдпреВ.рдПрд╕рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╣реА рдЕрд╢рдХреНрдд рдЬрд╛рдВрдЪ рд╣реИред рдФрд░ рд╡рд╣, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ, рдмрдЪрд╛ рдирд╣реАрдВ рдерд╛ред

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

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЯреНрд░рд┐рдЧрд░ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

V3080 рд╕рдВрднрд╡ рдЕрд╢рдХреНрддрддрд╛ред рдирд┐рд░реАрдХреНрд╖рдг 'рдкреНрд░рднрд╛рд╡реАRuleset' рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред RuleSet.cs 146
 var effectiveRuleset = ruleSet.GetEffectiveRuleSet(includedRulesetPaths); effectiveRuleset = effectiveRuleset.WithEffectiveAction(ruleSetInclude.Action); if (IsStricterThan(effectiveRuleset.GeneralDiagnosticOption, ....)) effectiveGeneralOption = effectiveRuleset.GeneralDiagnosticOption; 

рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рдиреЛрдЯ рдХрд░рддреА рд╣реИ рдХрд┐ WithEffectiveAction рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рдЕрд╢рдХреНрдд рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдЪреЗрдХрд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред WithEffectiveAction рдкрджреНрдзрддрд┐ рдХрд╛ рдирд┐рдХрд╛рдп, рдЬреЛ рдЕрд╢рдХреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдкреНрд░рднрд╛рд╡реА Ruleset рдЪрд░ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ:
 public RuleSet WithEffectiveAction(ReportDiagnostic action) { if (!_includes.IsEmpty) throw new ArgumentException(....); switch (action) { case ReportDiagnostic.Default: return this; case ReportDiagnostic.Suppress: return null; .... return new RuleSet(....); default: return null; } } 


рдпрджрд┐ рдЖрдк GetEffectiveRuleSet рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рдореЛрдб рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд╕реНрдерд╛рди рд╣реЛрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рд╣рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдЪреВрдВрдХрд┐ рдКрдкрд░ рдХреА рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдорд╛рдирдирд╛ тАЛтАЛрддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЛ рдПрдХ рдХреЛрд╢рд┐рд╢-рдкрдХрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдмреНрд▓реЙрдХ рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рджреЗрдЧрд╛, рдирд▓ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЪреБрдиреМрддрд┐рдпреЛрдВ рдкрд░ рдЪрдврд╝рддреЗ рд╣реБрдП, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЕрд╡рд░реЛрдзрди рдЕрдзрд┐рдХ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХрд╛рдлреА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рдЙрдкрднреЛрдХреНрддрд╛ рдЪрд░ рдкреНрд░рднрд╛рд╡реА Ruleset - IsStricterThan рд╡рд┐рдзрд┐ рдХреЛ рджреЗрдЦреЗрдВ
 private static bool IsStricterThan(ReportDiagnostic action1, ReportDiagnostic action2) { switch (action2) { case ReportDiagnostic.Suppress: ....; case ReportDiagnostic.Warn: return action1 == ReportDiagnostic.Error; case ReportDiagnostic.Error: return false; default: return false; } } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ ReportDiagnostic.Default рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдЧрдгрдирд╛ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рджреЛ рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рд╕реНрд╡рд┐рдЪ рд╣реИред рддреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдХреЙрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ:

WithEffectiveAction рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛:
 #nullable enable public RuleSet? WithEffectiveAction(ReportDiagnostic action) 

рдХреЙрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
 RuleSet? effectiveRuleset = ruleSet.GetEffectiveRuleSet(includedRulesetPaths); effectiveRuleset = effectiveRuleset?.WithEffectiveAction(ruleSetInclude.Action); if (IsStricterThan(effectiveRuleset?.GeneralDiagnosticOption ?? ReportDiagnostic.Default, effectiveGeneralOption)) effectiveGeneralOption = effectiveRuleset.GeneralDiagnosticOption; 

рдпрд╣ рдЬрд╛рдирддреЗ рд╣реБрдП рдХрд┐ IsStricterThan рдХреЗрд╡рд▓ рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ - рд╕реНрдерд┐рддрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣:
 if (effectiveRuleset == null || IsStricterThan(effectiveRuleset.GeneralDiagnosticOption, effectiveGeneralOption)) 

рдЖрдЗрдП рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реЗ рдЕрдЧрд▓реЗ рд╕рдВрджреЗрд╢ рдкрд░ рдЬрд╛рдПрдВред

V3080 рд╕рдВрднрд╡ рдЕрд╢рдХреНрддрддрд╛ред 'рдкреНрд░реЙрдкрд░реНрдЯреАрд╕рдВрдмреЙрд▓' рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред BinderFactory.BinderFactoryVisitor.cs 372
 var propertySymbol = GetPropertySymbol(parent, resultBinder); var accessor = propertySymbol.GetMethod; if ((object)accessor != null) resultBinder = new InMethodBinder(accessor, resultBinder); 

рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рд╕рд╣реА рдХрд░рддреЗ рд╕рдордп рдкреНрд░реЙрдкрд░реНрдЯреАрд╕реНрдореЙрд▓ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рдЖрдЧреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
 private SourcePropertySymbol GetPropertySymbol( BasePropertyDeclarationSyntax basePropertyDeclarationSyntax, Binder outerBinder) { .... NamedTypeSymbol container = GetContainerType(outerBinder, basePropertyDeclarationSyntax); if ((object)container == null) return null; .... return (SourcePropertySymbol)GetMemberSymbol(propertyName, basePropertyDeclarationSyntax.Span, container, SymbolKind.Property); } 

GetMemberSymbol рд╡рд┐рдзрд┐ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрд╢рдХреНрдд рднреА рд╣реЛ рд╕рдХрддреА рд╣реИред
 private Symbol GetMemberSymbol( string memberName, TextSpan memberSpan, NamedTypeSymbol container, SymbolKind kind) { foreach (Symbol sym in container.GetMembers(memberName)) { if (sym.Kind != kind) continue; if (sym.Kind == SymbolKind.Method) { .... var implementation = ((MethodSymbol)sym).PartialImplementationPart; if ((object)implementation != null) if (InSpan(implementation.Locations[0], this.syntaxTree, memberSpan)) return implementation; } else if (InSpan(sym.Locations, this.syntaxTree, memberSpan)) return sym; } return null; } 

рдПрдХ рдЕрд╢рд╛рдВрдд рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдХреЙрд▓ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрджрд▓ рдЬрд╛рдПрдЧреА:
 #nullable enable SourcePropertySymbol? propertySymbol = GetPropertySymbol(parent, resultBinder); MethodSymbol? accessor = propertySymbol?.GetMethod; if ((object)accessor != null) resultBinder = new InMethodBinder(accessor, resultBinder); 

рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдЬрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдХрд╣рд╛рдБ рдареАрдХ рдХрд░рдирд╛ рд╣реИред рд╕реНрдЯреИрдЯрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЙрд▓ рдХреЗ рд╕рднреА рдЬрдВрдЬреАрд░реЛрдВ рдореЗрдВ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдХреНрд╖реЗрддреНрд░ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдХреЗ рдЗрд╕ рд╕рдВрднрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИред

V3080 рд╕рдВрднрд╡ рдЕрд╢рдХреНрддрддрд╛ред 'SimpleName' рдХреЗ рдирд┐рд░реАрдХреНрд╖рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред CSharpCommandLineParser.cs 1556
 string simpleName; simpleName = PathUtilities.RemoveExtension( PathUtilities.GetFileName(sourceFiles.FirstOrDefault().Path)); outputFileName = simpleName + outputKind.GetDefaultExtension(); if (simpleName.Length == 0 && !outputKind.IsNetModule()) .... 

рд╕рдорд╕реНрдпрд╛ simpleName.Length рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд╕рд╛рде рд╣реИ ред simpleName рддрд░реАрдХреЛрдВ рдХреА рдПрдХ рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ рдФрд░ рдЕрд╢рдХреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡реИрд╕реЗ, рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рдХреЗ рд▓рд┐рдП, рдЖрдк RemoveExtension рд╡рд┐рдзрд┐ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрд╛рде рд╕реЗ рдЕрдВрддрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред GetFileNameWithoutExtensionред рдпрд╣рд╛рдБ рд╣рдо рдЦреБрдж рдХреЛ рд╕рд╛рдзрд╛рд░рдг рдирд╛рдо рдЬрд╛рдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ! = рдЕрд╢рдХреНрдд , рд▓реЗрдХрд┐рди рдЧреИрд░-рд╢реВрдиреНрдп рд▓рд┐рдВрдХ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдХреЛрдб рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
 #nullable enable public static string? RemoveExtension(string path) { .... } string simpleName; 

рдХреЙрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
 simpleName = PathUtilities.RemoveExtension( PathUtilities.GetFileName(sourceFiles.FirstOrDefault().Path)) ?? String.Empty; 

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


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

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

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



рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдПрдХ рдЕрдВрдЧреНрд░реЗрдЬреА-рднрд╛рд╖реА рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рдкреЙрд▓ рдПрд░реЗрдореАрд╡, рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рд░реЗрдирдХрд┐рдиред C # 8.0 рдФрд░ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░

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


All Articles