.NET рдХреЛрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА GitHub рдкрд░ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп C # рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдпрд╣ рд╢рд╛рдпрдж рд╣реА рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдХрд╛рд░рдг, рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рдЕрдВрдзреЗрд░реЗ рдХреЛрдиреЛрдВ рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдЕрдзрд┐рдХ рдордиреЛрд░рдо рд╣реЛ рд░рд╣рд╛ рд╣реИред рддреЛ рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдо рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрдЯреИрдЯрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреА рдорджрдж рд╕реЗ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ - рдХреНрдпрд╛ рд╣рдо рдЕрдВрддрддрдГ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдкрд╛рдПрдВрдЧреЗ?
рдореИрдВ рдбреЗрдврд╝ рд╕рд╛рд▓ рд╕реЗ рдЗрд╕ рд▓реЗрдЦ рдХреА рдУрд░ рдЕрдкрдирд╛ рд░рд╛рд╕реНрддрд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░, рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдПрдХ рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ рдерд╛ рдХрд┐ .NET рдХреЛрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдПрдХ tidbit рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЪреЗрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рд╡рд╛рджреЗ рдХрд╛ рд╣реИред рдореИрдВ рдХрдИ рдмрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣рд╛ рдерд╛, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдХреЛрдб рдЯреБрдХрдбрд╝реЗ рдвреВрдВрдврддрд╛ рд░рд╣рд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рдХреА рд╕реВрдЪреА рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдЖрдЧреЗ рдирд╣реАрдВ рдмрдврд╝рд╛ред рдФрд░ рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ - рдпрд╣ рдЖрдЦрд┐рд░рдХрд╛рд░ рд╣реБрдЖ! рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдЦ рдЖрдкрдХреЗ рд╕рд╛рдордиреЗ рд╕рд╣реА рд╣реИред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рдЬрд╛рдБрдЪ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг
рдпрджрд┐ рдЖрдк рдХреЛрдб рдЬрд╛рдВрдЪ рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рдЖрдк рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдБ рдореИрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдФрд░ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрддрд╛ рд░рд╣рд╛ рд╣реВрдБ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдкреБрдирд░реБрддреНрдкрд╛рджрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреАред
рдЬрд╛рдБрдЪ рдХреЗ рддрд╣рдд рдкрд░рд┐рдпреЛрдЬрдирд╛
рд╢рд╛рдпрдж, рдореИрдВ рдпрд╣ рдмрддрд╛рдХрд░ рдЫреЛрдбрд╝ рд╕рдХрддрд╛ рдерд╛ рдХрд┐ CoreFX (.NET Core рд▓рд╛рдЗрдмреНрд░реЗрд░реА) рдХреНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реБрдирд╛ рд╣реИ, рддреЛ рд╡рд┐рд╡рд░рдг рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣
GitHub рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреГрд╖реНрда рдХреЗ рд╕рдорд╛рди
рд╣реИ , рдЬрд╣рд╛рдВ рдЖрдк рд╕реНрд░реЛрдд рдХреЛрдб рднреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╡рд┐рд╡рд░рдг:
рдЗрд╕ рд░реЗрдкреЛ рдореЗрдВ .NET рдХреЛрд░ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдЬрд┐рд╕реЗ "CoreFX" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЗрд╕рдореЗрдВ System.Collections, System.IO, System.Xml, рдФрд░ рдХрдИ рдЕрдиреНрдп рдШрдЯрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╕рдВрдмрдВрдзрд┐рдд .NET рдХреЛрд░ рд░рдирдЯрд╛рдЗрдо рд░реЗрдкреЛ (рдЬрд┐рд╕реЗ "CoreCLR" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдореЗрдВ .NET рдХреЛрд░ рдХреЗ рд▓рд┐рдП рд░рдирдЯрд╛рдЗрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдЗрд╕рдореЗрдВ RyuJIT, .NET GC рдФрд░ рдХрдИ рдЕрдиреНрдп рдШрдЯрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд░рдирдЯрд╛рдЗрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛрдб (System.PStreet.CoreLib) CoreCLR рд░реЗрдкреЛ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИред рдЗрд╕реЗ рд░рдирдЯрд╛рдЗрдо рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдмрдирд╛рдпрд╛ рдФрд░ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред CoreFX рдХреЗ рдмрд╛рдХреА рд░рдирдЯрд╛рдЗрдо-рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрд╢рди рдХреЗ рдЕрдЬреНрдЮреЗрдп рд╣реИрдВ рдФрд░ рдЗрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рднреА рд╕рдВрдЧрдд .NET рд░рдирдЯрд╛рдЗрдо (рдЬреИрд╕реЗ CoreRT) рдкрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред
рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╡рд┐рдзрд┐
рдореИрдВрдиреЗ
PVS-Studio рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХреА рдЬрд╛рдБрдЪ рдХреАред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рди рдХреЗрд╡рд▓ рд╕реА # рдХреЛрдб, рдмрд▓реНрдХрд┐ рд╕реА, рд╕реА ++, рдЬрд╛рд╡рд╛ рдХрд╛ рднреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИред C # рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЕрднреА рддрдХ рдХреЗрд╡рд▓ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрдмрдХрд┐ C, C ++, Java рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╡рд┐рдВрдбреЛрдЬ, рд▓рд┐рдирдХреНрд╕, рдореИрдХрдУрдПрд╕ рдХреЗ рддрд╣рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЖрдорддреМрд░ рдкрд░ C # рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдореИрдВ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ (2010-2019 рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ) рдХреЗ рд▓рд┐рдП рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╢рд╛рдпрдж рдпрд╣ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░рд┐рджреГрд╢реНрдп рд╣реИ: рдЦреБрд▓рд╛ рд╕рдорд╛рдзрд╛рди, рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЪрд▓рд╛рдирд╛, рдЪреЗрддрд╛рд╡рдиреА рд╕реВрдЪреА рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ CoreFX рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдерд╛ред
рдореБрд╢реНрдХрд┐рд▓ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рднреА .sln рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдЦреЛрд▓рдирд╛ рдФрд░ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░реНрдг рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╢рд╛рдпрдж рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ - рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдЗрд╕ рдЖрдХрд╛рд░ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рд╕рд╛рдордирд╛ рдХрд░реЗрдЧрд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереА, рдХреНрдпреЛрдВрдХрд┐ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рддрд░рдг рдореЗрдВ рдПрдордПрд╕рдмреАрдпреВрдЖрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ (рдФрд░ .sln) рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕рдВрд╕реНрдХрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдореБрдЭреЗ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рдерд╛ рдХрд┐ рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреА рдереА, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП "PVS-Studio_Cmd.exe" рдЪрд▓рд╛рдПрдЧреАред CoreFX рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдирд┐рдХрд╛рд▓реЗрдЧреА рдФрд░ рдПрдХ рдЕрд▓рдЧ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдмрдЪрд╛рдПрдЧрд╛ (рдпрд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдзреНрд╡рдЬ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред ред
Presto! рдирддреАрдЬрддрди, рдореИрдВ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╛рдорд╛рдиреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдкреЗрдВрдбреЛрд░рд╛ рдмреЙрдХреНрд╕ рд░рдЦ рд░рд╣рд╛ рд╣реВрдВред рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдЗрди рд▓реЙрдЧ рдХреЛ PlogConverter рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╡рд┐рддрд░рдг рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЖ рд░рд╣рд╛ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП, рдЕрд▓рдЧ рд▓реЙрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдорд░реНрдЬ рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╕рдордп рдореИрдВ docs.microsoft.com рдФрд░ NuGet рд╕рдВрдХреБрд▓ рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реВрдБ, рдЬреЛ nuget.org рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд▓реЗрдЦрди / рд╕рдВрдХреБрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдП рдЧрдП рдХреЛрдб рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдмрд╣реБрдд рд╣реА рдЕрдЬреАрдм рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛рд╕реЗрдЯ рд╣реЛрдиреЗ рдкрд░ рдкреНрд░рд▓реЗрдЦрди рдиреЗ рдЙрддреНрдкрдиреНрди рдЕрдкрд╡рд╛рджреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирдП рдкреИрдХреЗрдЬ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдкрдХреЛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ред рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рдорд╛рди рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ NuGet рд╕реЗ рд╕рдВрдХреБрд▓ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдирдИ рдирд╣реАрдВ рд╣реИред рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдмрд┐рдирд╛ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдмрдирд╛рдП рдЗрд╕реЗ 'рд╕реНрдкрд░реНрд╢' рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХреЛрдб рдХреЗ рдХреБрдЫ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реБрдП, рдореБрдЭреЗ docs.microsoft.com рдкрд░ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдФрд░ nuget.org рд╕реЗ рд╕рдВрдХреБрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ, рдкреИрдХреЗрдЬ (рдЕрдиреНрдп рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ) рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА (рд╡рд┐рд╡рд░рдг) рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХреЗ рджреМрд░рд╛рди рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдиреНрдп рдЬрд╛рдБрдЪ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдБ
рд╡реИрд╕реЗ, рдпрд╣ рд▓реЗрдЦ рдЕрдкрдиреА рддрд░рд╣ рдХрд╛ рдЕрдиреВрдард╛ рдирд╣реАрдВ рд╣реИред рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪреЗрдХ рдкрд░ рдЕрдиреНрдп рд▓реЗрдЦ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдЗрд╕ рд▓рд┐рдВрдХ рд╕реЗ рдЖрдк
рдЬрд╛рдБрдЪ рдХреА рдЧрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА
рд╕реВрдЪреА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реА рд╕рд╛рдЗрдЯ рдкрд░ рдЖрдкрдХреЛ рди рдХреЗрд╡рд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪреЗрдХ рдХреЗ рд▓реЗрдЦ, рдмрд▓реНрдХрд┐ C, C ++, C #, Java, рд╕рд╛рде рд╣реА рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдиреЛрдЯреНрд╕ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рддрдХрдиреАрдХреА рд▓реЗрдЦ рдорд┐рд▓реЗрдВрдЧреЗред рдЖрдк
рдмреНрд▓реЙрдЧ рдореЗрдВ рдпрд╣ рд╕рдм рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧреА рдиреЗ рдкрд╣рд▓реЗ рд╣реА рд╡рд░реНрд╖ 2015 рдореЗрдВ .NET рдХреЛрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдкрд╣рд▓реЗ рд╣реА рдЬрд╛рдБрдЪ рдХрд░ рд▓реА рд╣реИред рдкрд┐рдЫрд▓реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд▓реЗрдЦ рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ: "
.NET рдХреЛрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ (CoreFX) рдХрд╛ рдХреНрд░рд┐рд╕рдорд╕ рд╡рд┐рд╢реНрд▓реЗрд╖рдг ред"
рдкрддрд╛ рдЪрд▓рд╛ рддреНрд░реБрдЯрд┐рдпрд╛рдБ, рд╕рдВрджрд┐рдЧреНрдз рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЯреБрдХрдбрд╝реЗ
рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЕрдзрд┐рдХ рд░реБрдЪрд┐ рдХреЗ рд▓рд┐рдП, рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рджрд┐рдП рдЧрдП рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░реЗрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕рдВрджреЗрд╢ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдкрдврд╝реЗрдВред
рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ
рдЗрд╢реНрдпреВ рдПрди рд▓реЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░ рджрд┐рдпрд╛ рд╣реИ - рдЗрд╕ рддрд░рд╣ рдпрд╣ рдЬрд╛рдирдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд╣рд╛рдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЕрдЧрд▓реЗ рдПрдХ рдХреЗ рдмрд╛рджред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдВрд╢реЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
рдЕрдВрдХ 1abstract public class Principal : IDisposable { .... public void Save(PrincipalContext context) { .... if ( context.ContextType == ContextType.Machine || _ctx.ContextType == ContextType.Machine) { throw new InvalidOperationException( SR.SaveToNotSupportedAgainstMachineStore); } if (context == null) { Debug.Assert(this.unpersisted == true); throw new InvalidOperationException(SR.NullArguments); } .... } .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3095 'рд╕рдВрджрд░реНрдн' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдпрд╣ рдЕрд╢рдХреНрдд рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рдБрдЪ рд░реЗрдЦрд╛рдПрдБ: 340, 346. рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ .cs 340
рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐
рд╕рдВрджрд░реНрдн рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП
рд╢реВрдиреНрдп рдорд╛рди рдЕрдорд╛рдиреНрдп рд╣реИ, рд╡реЗ
InvalidOperationException рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдЬрд╝реЛрд░ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкрд┐рдЫрд▓реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдКрдкрд░ рд╣рдо рд╕рдВрджрд░реНрдн
рд╕рдВрджрд░реНрдн рдХреЗ рдПрдХ рдмрд┐рдирд╛ рд╢рд░реНрдд рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ -
рд╕рдВрджрд░реНрдн ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрджрд┐
рд╕рдВрджрд░реНрдн рдорд╛рди
рд╢реВрдиреНрдп рд╣реИ, рддреЛ
NullReferenceException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рдЕрдкреЗрдХреНрд╖рд┐рдд
InvalidOperationExcetion рдХреЗ рдмрдЬрд╛рдп рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
редрдЖрдЗрдП рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рд╣рдо рд▓рд╛рдпрдмреНрд░реЗрд░реА
System.DirectoryServices.AccountManagement рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВрдЧреЗ:
GroupPrincipal groupPrincipal = new GroupPrincipal(new PrincipalContext(ContextType.Machine)); groupPrincipal.Save(null);
GroupPrincipal рдХреЛ
рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрдЯ рдХреНрд▓рд╛рд╕ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ
рд╕реЗрд╡ рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдерд╛ред
рд╣рд┐рдд рдХреЗ рд▓рд┐рдП, рдЖрдк NuGet рд╕реЗ рдЙрдкрдпреБрдХреНрдд рдкреИрдХреЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдкреИрдХреЗрдЬ 4.5.0 рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред
рдЕрдВрдХ 2 private SearchResultCollection FindAll(bool findMoreThanOne) { searchResult = null; DirectoryEntry clonedRoot = null; if (_assertDefaultNamingContext == null) { clonedRoot = SearchRoot.CloneBrowsable(); } else { clonedRoot = SearchRoot.CloneBrowsable(); } .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3004 'рддрддреНрдХрд╛рд▓реАрди' рдХрдерди 'рдФрд░' рдХрдерди рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред DirectorySearcher.cs 629
рднрд▓реЗ рд╣реА
_assertDefaultNamingContext == рдЕрд╢рдХреНрдд рд╕реНрдерд┐рддрд┐ рд╕рд╣реА рд╣реИ рдпрд╛ рдЧрд▓рдд, рд╡рд╣реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЬрд╛рдПрдЧреА, рдФрд░
рддрдм рдФрд░
рдпрджрд┐ рдХрдерди рдХреА
рдЕрдиреНрдп рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рд╕рдорд╛рди рдирд┐рдХрд╛рдп рд╣реИрдВред рдпрд╛ рддреЛ рдПрдХ рд╢рд╛рдЦрд╛ рдореЗрдВ рдПрдХ рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдЖрдк рдбреЗрд╡рд▓рдкрд░реНрд╕ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рднреНрд░рдорд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдпрд╛рди рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдВрдХ 3 public class DirectoryEntry : Component { .... public void RefreshCache(string[] propertyNames) { .... object[] names = new object[propertyNames.Length]; for (int i = 0; i < propertyNames.Length; i++) names[i] = propertyNames[i]; .... if (_propertyCollection != null && propertyNames != null) .... .... } .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3095 'рдкреНрд░реЙрдкрд░реНрдЯреАрдиреЗрдо' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрдм рдЗрд╕реЗ рд╢реВрдиреНрдп рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрди: 990, 1004ред DirectoryEntry.cs 990
рдлрд┐рд░, рд╣рдо рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рдЕрдЬреАрдм рдХреНрд░рдо рджреЗрдЦрддреЗ рд╣реИрдВред рд╡рд┐рдзрд┐ рдореЗрдВ, рдПрдХ рдЪреЗрдХ
рдкреНрд░реЙрдкрд░реНрдЯреАрдиреЗрдо рд╣реИ! = Null , рдЕрд░реНрдерд╛рдд рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдкрдиреЗ рдард┐рдХрд╛рдиреЛрдВ рдХреЛ
рд╢реВрдиреНрдп рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд┐рдзрд┐ рдореЗрдВ рдЖрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдКрдкрд░ рдЖрдк рдЗрд╕ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдХреБрдЫ рдПрдХреНрд╕реЗрд╕ рдСрдкрд░реЗрд╢рди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ -
propertyNames.Length рдФрд░
propertyNames [i] ред рдкрд░рд┐рдгрд╛рдо рдХрд╛рдлреА рдЕрдиреБрдорд╛рдирд┐рдд рд╣реИ - рдпрджрд┐ рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рд╡рд┐рдзрд┐ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ
NullReferenceExcepption рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреА рдШрдЯрдирд╛ред
рдХреНрдпрд╛ рд╕рдВрдпреЛрдЧ рд╣реИ!
RefreshCache рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд┐рдзрд┐ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЖрд╡рд╢реНрдпрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВрдЧреЗред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛
рд╕реЗрд╡рд╛рдПрдБ рдФрд░ рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЛрдб рд▓рд┐рдЦреЗрдВрдЧреЗ:
DirectoryEntry de = new DirectoryEntry(); de.RefreshCache(null);
рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдереАред
рдмрд╕ рдХрд┐рдХ рдХреЗ рд▓рд┐рдП, рдЖрдк NuGet рдкреИрдХреЗрдЬ рдХреЗ рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛, рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ
System.DirectoryServices рдкреИрдХреЗрдЬ (рдореИрдВрдиреЗ рд╕рдВрд╕реНрдХрд░рдг 4.5.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛) рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдо рдиреАрдЪреЗ рд╣реИред
рдЕрдВрдХ 4рдЕрдм рд╣рдо рд╡рд┐рдкрд░реАрдд рд╕реЗ рдЬрд╛рдПрдВрдЧреЗ - рдкрд╣рд▓реЗ рд╣рдо рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдПрдХ рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╣рдо рдЕрдВрджрд░ рджреЗрдЦреЗрдВрдЧреЗред рдЖрдЗрдП рджреЗрдЦреЗрдВ
System.Drawing.CharacterRange рд╕рдВрд░рдЪрдирд╛ рд╕реЗ
System.Drawing.Common рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдПрдХ рд╣реА рдирд╛рдо NuGet рдкреИрдХреЗрдЬред
рд╣рдо рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
CharacterRange range = new CharacterRange(); bool eq = range.Equals(null); Console.WriteLine(eq);
рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдорд╛рд░реА рдореЗрдореЛрд░реА рдХреЛ рдЬреЙрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо
docs.microsoft.com рдХреЛ рдпрд╣ рдпрд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдмреЛрдзрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди
obj.Equals (null) рд╕реЗ рдХреНрдпрд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдорд╛рди рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ:
рд╕рдорд╛рди (рдСрдмреНрдЬреЗрдХреНрдЯ) рд╡рд┐рдзрд┐ рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдХрдерди рд╕рд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реВрдЪреА рдореЗрдВ, x, y, рдФрд░ z рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИрдВред....x.Equals (рд╢реВрдиреНрдп) рдЧрд▓рдд рджреЗрддрд╛ рд╣реИредрдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╛рда "рдЧрд▓рдд" рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдмреЗрд╢рдХ, рдирд╣реАрдВред рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред :) рдЗрд╕рд▓рд┐рдП, рд╣рдо рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред
рдпрд╣ 4.5.1 рд╕рдВрд╕реНрдХрд░рдг рдХреЗ NuGet
System.Drawing.Common рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдерд╛ред рдЕрдЧрд▓рд╛ рдХрджрдо рдбрд┐рдмрдЧрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рдХреЛрдб рдЪрд▓рд╛рдирд╛ рд╣реИред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ:
рдЕрдм рд╣рдо рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ,
рдЕрдХреНрд╖рд░ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА рдореЗрдВ
рд╕рдорд╛рди рдкрджреНрдзрддрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
public override bool Equals(object obj) { if (obj.GetType() != typeof(CharacterRange)) return false; CharacterRange cr = (CharacterRange)obj; return ((_first == cr.First) && (_length == cr.Length)); }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3115 'null' рдХреЛ 'рдмрд░рд╛рдмрд░' рдкрджреНрдзрддрд┐ рд╕реЗ 'NullReferenceException' рдореЗрдВ
рдкрд░рд┐рдгрд╛рдорд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪрд░рд┐рддреНрд░рд░рдВрдЧред релрем
рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕рд╛рдмрд┐рдд рдХрд░рдирд╛ рдерд╛ -
рдУрдмреНрдЬ рдкреИрд░рд╛рдореАрдЯрд░ рдЕрдиреБрдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ,
NullReferenceException рдЕрдкрд╡рд╛рдж рдХреЛ рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЖрд╡реГрддреНрддрд┐ рд╡рд┐рдзрд┐
GetType рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
редрдЕрдВрдХ 5рдЬрдм рд╣рдо рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЦреЛрдЬ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдЗрдП рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЕрдВрд╢ рдкрд░ рд╡рд┐рдЪрд╛рд░
рдХрд░реЗрдВ -
рдЖрдЗрдХрди ред рд╡рд┐рдзрд┐
рд╕рд╣реЗрдЬреЗрдВ ред рдЕрдиреБрд╕рдВрдзрд╛рди рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рд╡рд┐рдзрд┐ рд╡рд┐рд╡рд░рдг рджреЗрдЦреЗрдВред
рд╡рд┐рдзрд┐ рдХрд╛ рдХреЛрдИ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рд╣реИ:
рдЪрд▓реЛ docs.microsoft.com - "
Icon.Save (рд╕реНрдЯреНрд░реАрдо) рд╡рд┐рдзрд┐ " рдХреЛ
рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрдирдкреБрдЯреНрд╕ рдпрд╛ рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкрд░ рдХреЛрдИ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд╣реИред
рдЕрдм рдХреЛрдб рдирд┐рд░реАрдХреНрд╖рдг рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред
public sealed partial class Icon : MarshalByRefObject, ICloneable, IDisposable, ISerializable { .... public void Save(Stream outputStream) { if (_iconData != null) { outputStream.Write(_iconData, 0, _iconData.Length); } else { .... if (outputStream == null) throw new ArgumentNullException("dataStream"); .... } } .... }
PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3095 рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ '
рдЖрдЙрдЯрдкреБрдЯрд╕реНрдЯреНрд░реАрдо ' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 654, 672. Icon.Windows.cs 654
рдлрд┐рд░ рд╕реЗ, рдпрд╣ рдХрд╣рд╛рдиреА рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ - рдПрдХ рд╢реВрдиреНрдп рд╕рдВрджрд░реНрдн рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдЪрд▓рди, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдзрд┐ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ
рдЕрд╢рдХреНрдд рдХрд┐рдП рдмрд┐рдирд╛ рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдлрд▓ рд╕рдВрдпреЛрдЧ - рджреЛрдиреЛрдВ рд╡рд░реНрдЧ рдФрд░ рд╡рд┐рдзрд┐ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп рд╕рд░рд▓ рд╣реИ - рдХреЛрдб рдХреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ
рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдПред
Stream.Write (_iconData, 0, _iconData.ength); рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЪрд░
outputStream -
null рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрдЪрд╛рдПрдВред рд╢рд░реНрдд рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛
_iconData! = рдЕрд╢рдХреНрдд рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдЖрдЗрдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЛ рджреЗрдЦреЗрдВ:
public Icon(string fileName) : this(fileName, 0, 0) { }
рдпрд╣ рд╕рд┐рд░реНрдл рджреВрд╕рд░реЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХрд╛рдо рд╕реМрдВрдкрддрд╛ рд╣реИред
public Icon(string fileName, int width, int height) : this() { using (FileStream f = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read)) { Debug.Assert(f != null, "File.OpenRead returned null instead of throwing an exception"); _iconData = new byte[(int)f.Length]; f.Read(_iconData, 0, _iconData.Length); } Initialize(width, height); }
рдмрд╕, рдпрд╣реА рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрджрд┐ рд╣рдо рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░
рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рд╡рд┐рдзрд┐ рдореЗрдВ рдХреЛрдИ рдХреНрд░реИрд╢ рдирд╣реАрдВ рд╣реИ, рддреЛ рдлрд╝реАрд▓реНрдб
_iconData рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реЛрдЧрд╛, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ
рдЖрдЗрдХрди рд╡рд░реНрдЧ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛ рд╣реИ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдЗрдХрди рдлрд╝рд╛рдЗрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж рд╣рдореЗрдВ
рд╕реЗрд╡ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдПрдХ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ
рдЕрд╢рдХреНрдд рдорд╛рди рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛, рдпрд╣реА рд╣рдо рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
Icon icon = new Icon(@"D:\document.ico"); icon.Save(null);
рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред
рдЕрдВрдХ 6рд╣рдо рд╕рдореАрдХреНрд╖рд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред
CimType.UInt32 рдФрд░ рдЕрдиреНрдп
рдорд╛рдорд▓реЗ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмреАрдЪ 3 рдЕрдВрддрд░ рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
private static string ConvertToNumericValueAndAddToArray(....) { string retFunctionName = string.Empty; enumType = string.Empty; switch(cimType) { case CimType.UInt8: case CimType.SInt8: case CimType.SInt16: case CimType.UInt16: case CimType.SInt32: arrayToAdd.Add(System.Convert.ToInt32( numericValue, (IFormatProvider)CultureInfo.InvariantCulture .GetFormat(typeof(int)))); retFunctionName = "ToInt32"; enumType = "System.Int32"; break; case CimType.UInt32: arrayToAdd.Add(System.Convert.ToInt32( numericValue, (IFormatProvider)CultureInfo.InvariantCulture .GetFormat(typeof(int)))); retFunctionName = "ToInt32"; enumType = "System.Int32"; break; } return retFunctionName; }
рдмреЗрд╢рдХ, рдХреЛрдИ рдорддрднреЗрдж рдирд╣реАрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИред
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3139 рджреЛ рдпрд╛ рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рдХреЗрд╕-рд╢рд╛рдЦрд╛рдПрдБ рдПрдХ рд╣реА рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ рд╣реИрдВред WMIGenerator.cs 5220
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдпрд╣ рдХреЛрдб рд╢реИрд▓реА рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдПрдХ рд╣реА рддрд░реНрдХ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдВрдХ 7Microsoft.CSharp рд▓рд╛рдЗрдмреНрд░реЗрд░реАред
private static IList<KeyValuePair<string, object>> QueryDynamicObject(object obj) { .... List<string> names = new List<string>(mo.GetDynamicMemberNames()); names.Sort(); if (names != null) { .... } .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3022 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рдирд╛рдо! = рдирд▓' рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реИред рдбрд╛рдпрдиреЗрдорд┐рдХрдбреЗрдмрдЧрд░рдкреНрд░реЙрдХреНрд╕реА .cs 426
рдореИрдВ рд╕рдВрднрд╡рддрдГ рдЗрд╕ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдХрдИ
рд╕рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдирд┐рджрд╛рди
V3022 рдФрд░
V3063 рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рдереЗред рдХрдИ (рдмрд╣реБрдд) рдЕрдЬреАрдм рдЬрд╛рдБрдЪреЗрдВ рд╣реБрдИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рд╕реА рддрд░рд╣ рдореЗрд░реА рдЖрддреНрдорд╛ рдореЗрдВ рд╕рдорд╛ рдЧрдИред рд╢рд╛рдпрдж, рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдерд╛рдиреАрдп
рдирд╛рдо рдЪрд░ рдХреА рддреБрд▓рдирд╛
рдирд▓ рд╕реЗ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ
ред рди рдХреЗрд╡рд▓ рд╕рдВрджрд░реНрдн рдХреЛ рдирдП рдмрдирд╛рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП
рдирд╛рдо рдЪрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
рд╕реЙрд░реНрдЯ рд╡рд┐рдзрд┐ рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрдХреАрди рд╣реИ, рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП, рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред
рдЕрдВрдХ 8рдХреЛрдб рдХрд╛ рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЯреБрдХрдбрд╝рд╛:
private static void InsertChildNoGrow(Symbol child) { .... while (sym?.nextSameName != null) { sym = sym.nextSameName; } Debug.Assert(sym != null && sym.nextSameName == null); sym.nextSameName = child; .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3042 рд╕рдВрднрд╛рд╡рд┐рдд NullReferenceExceptionред '?' рдФрд░ '' рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ 'рд╕рд┐рдореНрдмрд▓' рдСрдмреНрдЬреЗрдХреНрдЯ SymbolStore.cs 56 рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рджреЗрдЦреЛ рдХреНрдпрд╛ рдЪреАрдЬ рд╣реИред рд▓реВрдк рдХрдо рд╕реЗ рдХрдо рджреЛ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдкрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ:
- sym == рдЕрд╢рдХреНрдд ;
- sym.nextSameName == рдЕрд╢рдХреНрдд ред
рджреВрд╕рд░реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЪреВрдБрдХрд┐
рдирд╛рдо рдЖрд╡реГрддреНрддрд┐ рдХреНрд╖реЗрддреНрд░ рдмрд┐рдирд╛ рд╢рд░реНрдд рдХреЗ рдиреАрдЪреЗ рдкрд╣реБрдБрдЪ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрджрд┐
рд╕рд┐рдореНрдмрд▓ -
рдирд▓ рд╣реИ , рддреЛ
NullReferenceException type рдХрд╛ рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛ред
рдХреНрдпрд╛ рдЖрдк рдЕрдВрдзреЗ рд╣реИрдВ? рд╡рд╣рд╛рдБ
рдбреАрдмрдЧ.рдПрдЬрд░реНрд╕ рдХреЙрд▓ рд╣реИ, рдЬрд╣рд╛рдБ рдпрд╣ рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐
рд╕рд┐рдореНрдмрд▓! = рдирд▓ тАЭ- рдХреЛрдИ рдмрд╣рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рдмрд╛рдд рд╣реИ! рдЬрдм рд░рд┐рд▓реАрдЬ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ,
рдбреАрдмрдЧ.рдЖрд╕рд░ рдХрд┐рд╕реА рднреА рдорджрдж рдХрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдФрд░ рдКрдкрд░ рдХреА рд╢рд░реНрдд рдХреЗ рд╕рд╛рде, рд╣рдо рдЬреЛ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ рд╡рд╣ рд╣реИ
NullReferenceException ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ -
рд░реЛрд╕рд▓рд┐рди рдХреА рдПрдХ рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЗрд╕реА рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐ рджреЗрдЦреА рд╣реИ, рдЬрд╣рд╛рдВ
рдбреАрдмрдЧ рдХреЗ рд╕рд╛рде рдЗрд╕реА рддрд░рд╣ рдХреА рд╕реНрдерд┐рддрд┐ рдереАред
рдПрд╕реЗрдЯрд░ рд╣реБрдИред рд░реЛрдЬрд▓рд┐рди рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдПрдХ рдкрд▓ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рдХрд░ рджреЗрдВред
Microsoft.CodeAnalysis рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рд╕рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 16.1.6 + рд╕рд┐рдВрдЯреЗрдХреНрд╕ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ 1.0 рдореЗрдВ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рдкреБрди: рдЙрддреНрдкрдиреНрди рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдпрд╣ рдХреЛрдб рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
class C1<T1, T2> { void foo() { T1 val = default; if (val is null) { } } }
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдореЗрдВ рд╣рдореЗрдВ
рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯрдкреЗрдВрдЯрд░реНрдирд╕рд┐рдиреНрдЯреЗрдХреНрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА рдХреЗ рдиреЛрдб рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреЛрдб рдореЗрдВ
рд╢реВрдиреНрдп рдХреЗ рд▓рд┐рдП рдЗрд╕реА рдХреЗ рд▓рд┐рдП рдФрд░
рдЗрд╕рдХреЗ рд▓рд┐рдП
TypeSymbol рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВред
рдЙрд╕рдХреЗ рдмрд╛рдж, Visual Studio рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рд╣рдо рдИрд╡реЗрдВрдЯ рд╡реНрдпреВрдЕрд░ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓реЗрдЧреА:
Application: devenv.exe Framework Version: v4.0.30319 Description: The process was terminated due to an unhandled exception. Exception Info: System.Resources.MissingManifestResourceException at System.Resources.ManifestBasedResourceGroveler .HandleResourceStreamMissing(System.String) at System.Resources.ManifestBasedResourceGroveler.GrovelForResourceSet( System.Globalization.CultureInfo, System.Collections.Generic.Dictionary'2 <System.String,System.Resources.ResourceSet>, Boolean, Boolean, System.Threading.StackCrawlMark ByRef) at System.Resources.ResourceManager.InternalGetResourceSet( System.Globalization.CultureInfo, Boolean, Boolean, System.Threading.StackCrawlMark ByRef) at System.Resources.ResourceManager.InternalGetResourceSet( System.Globalization.CultureInfo, Boolean, Boolean) at System.Resources.ResourceManager.GetString(System.String, System.Globalization.CultureInfo) at Roslyn.SyntaxVisualizer.DgmlHelper.My. Resources.Resources.get_SyntaxNodeLabel() ....
Devenv.exe рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП:
Faulting application name: devenv.exe, version: 16.1.29102.190, time stamp: 0x5d1c133b Faulting module name: KERNELBASE.dll, version: 10.0.18362.145, time stamp: 0xf5733ace Exception code: 0xe0434352 Fault offset: 0x001133d2 ....
рд░реЛрд╕рд▓рд┐рди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде, рдЖрдк рдЙрд╕ рдЬрдЧрд╣ рдХреЛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдПрдХ рдЕрдкрд╡рд╛рдж рдерд╛:
private Conversion ClassifyImplicitBuiltInConversionSlow( TypeSymbol source, TypeSymbol destination, ref HashSet<DiagnosticInfo> useSiteDiagnostics) { Debug.Assert((object)source != null); Debug.Assert((object)destination != null); if ( source.SpecialType == SpecialType.System_Void || destination.SpecialType == SpecialType.System_Void) { return Conversion.NoConversion; } .... }
рдпрд╣рд╛рдБ, .NET рдХреЛрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рд╕реЗ рд╕рдорд╛рди рд╣реИ,
рдбреАрдмрдЧ рдХрд╛ рдПрдХ рдЪреЗрдХ рд╣реИред
Series рдЬреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдЕрдВрдХ 9рд╣рдореЗрдВ рдпрд╣рд╛рдВ рдереЛрдбрд╝реА-рдмрд╣реБрдд рдЫреВрдЯ рдорд┐рд▓реА рд╣реИ, рддреЛ рдЪрд▓рд┐рдП .NET рдХреЛрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВред
System.IO.IsolatedStorage рдкреИрдХреЗрдЬ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджрд┐рд▓рдЪрд╕реНрдк рдХреЛрдб рд╣реИрдВред
private bool ContainsUnknownFiles(string directory) { .... return (files.Length > 2 || ( (!IsIdFile(files[0]) && !IsInfoFile(files[0]))) || (files.Length == 2 && !IsIdFile(files[1]) && !IsInfoFile(files[1])) ); }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3088 рдХреЛрд╖реНрдардХ рджреНрд╡рд╛рд░рд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рджреЛ рдмрд╛рд░ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: ((рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐))ред рдХреЛрд╖реНрдардХ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИ рдпрд╛ рдЧрд▓рдд рдзрд╛рд░рдгрд╛ рдореМрдЬреВрдж рд╣реИред IsolatedStorageFile.cs 839
рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреЛрдб рд╕реНрд╡рд░реВрдкрдг рднреНрд░рд╛рдордХ рд╣реИ, рдХреБрдЫ рди рдХрд╣рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИред рдЗрд╕ рдХреЛрдб рдкрд░ рдПрдХ рдЫреЛрдЯреА рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдХрд╣реВрдБрдЧрд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╡рд╛рд▓рд╛ рдмрд╛рдПрдВ рдСрдкрд░реИрдВрдбреЛрдлрд╝ || рдСрдкрд░реЗрдЯрд░ рдореИрдВ рднрд░ рдореЗрдВ рдЖрдпрд╛ рдерд╛ред
рдлрд╛рдЗрд▓реЗрдВ> 2> рд╕рд╣реА, рдХреЛрд╖реНрдардХ рдореЗрдВ рдПрдХ рд╕рд╣реА рд╣реИред рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рддрд░рд╣ рдХреЛрдб рд╕реНрд╡рд░реВрдкрд┐рдд рд╣реИред рдереЛрдбрд╝рд╛ рдФрд░ рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рд╣реА рдСрдкрд░реЗрдВрдб -
(!! IsIdFile (рдлрд╛рдЗрд▓реЗрдВ [0]) &&! IsInfoFile (рдлрд╛рдЗрд▓реЗрдВ [0])) ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб рдмрд╣реБрдд рднреНрд░рд╛рдордХ рд╣реИред
рдЕрдВрдХ 10PVS-Studio 7.03 рдиреЗ
V3138 рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рдирд┐рдпрдо рдХреА рд╢реБрд░реБрдЖрдд рдХреА, рдЬреЛ рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдЙрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдЬрд┐рд╕реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЪреВрдХ
$ рдкреНрд░рддреАрдХ рдХреЗ рдХрд╛рд░рдг рд╡реЗ рдирд╣реАрдВ рдереЗ
ред System.Net рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдореБрдЭреЗ рдЗрд╕ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рдирд┐рдпрдо рдХреА рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рдШрдЯрдирд╛рдПрдВ рджреЗрдЦрдиреЗ рдХреЛ рдорд┐рд▓реАрдВред
internal static void CacheCredential(SafeFreeCredentials newHandle) { try { .... } catch (Exception e) { if (!ExceptionCheck.IsFatal(e)) { NetEventSource.Fail(null, "Attempted to throw: {e}"); } } }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3138 рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реЛрддреА рд╣реИред рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: рдИред SSPIHandleCache.cs 42
рдпрд╣ рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдХрд┐
рдлреЗрд▓ рд╡рд┐рдзрд┐ рдХрд╛ рджреВрд╕рд░рд╛ рддрд░реНрдХ рдПрдХ рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрдирд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ
рдИ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдЪреВрдХ
$ рдкреНрд░рддреАрдХ рдХреЗ рдХрд╛рд░рдг, рдХреЛрдИ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЕрдВрдХ 11рдпрд╣рд╛рдВ рдПрдХ рдФрд░ рдРрд╕рд╛ рд╣реА рдорд╛рдорд▓рд╛ рд╕рд╛рдордиреЗ рдЖрдпрд╛ рд╣реИред
public static async Task<string> GetDigestTokenForCredential(....) { .... if (NetEventSource.IsEnabled) NetEventSource.Error(digestResponse, "Algorithm not supported: {algorithm}"); .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3138 рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реЛрддреА рд╣реИред рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: рдПрд▓реНрдЧреЛрд░рд┐рдереНрдоред рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рдирд╣реЗрд▓реНрдкрд░
рд╕реНрдерд┐рддрд┐ рдКрдкрд░ рд╡рд╛рд▓реЗ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдлрд┐рд░ рд╕реЗ
$ рдкреНрд░рддреАрдХ рдЪреВрдХ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЧрд▓рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ,
рддреНрд░реБрдЯрд┐ рд╡рд┐рдзрд┐ рдореЗрдВ рд╣реЛ рд░рд╣реА рд╣реИ
редрдЕрдВрдХ 12System.Net.Mail рдкреИрдХреЗрдЬред рд╡рд┐рдзрд┐ рдЫреЛрдЯрд╛ рд╣реИ, рдореИрдВ рдмрдЧ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд░реЛрдЪрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрджреНрдзреГрдд рдХрд░реВрдВрдЧрд╛ред
internal void SetContent(Stream stream) { if (stream == null) { throw new ArgumentNullException(nameof(stream)); } if (_streamSet) { _stream.Close(); _stream = null; _streamSet = false; } _stream = stream; _streamSet = true; _streamUsedOnce = false; TransferEncoding = TransferEncoding.Base64; }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3008 '_streamSet' рдЪрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 123, 119. MimePart.cs 123
рдЪрд░ рдХреЗ рд▓рд┐рдП рдбрдмрд▓ рдорд╛рди рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ
_streamSet рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ (рдкрд╣рд▓реЗ - рд╢рд░реНрдд рдХреЗ рддрд╣рдд, рдлрд┐рд░ - рдмрд╛рд╣рд░)ред
рдзрд╛рд░рд╛ рдЪрд░ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдХрд╣рд╛рдиреАред рдирддреАрдЬрддрди,
_stream рдореЗрдВ рдЕрднреА рднреА рдореВрд▓реНрдп
рдкреНрд░рд╡рд╛рд╣ рд╣реЛрдЧрд╛ , рдФрд░
_streamSet рд╕рддреНрдп рд╣реЛрдЧрд╛
редрдЕрдВрдХ 13System.Linq.Expressions рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдХреЛрдб рдЯреБрдХрдбрд╝рд╛ рдЬреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ 2 рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдмрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рддрд░рд╣ рдЕрдзрд┐рдХ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡рд┐рдзрд┐ рдХрд╛рдлреА рдЕрд╕рд╛рдорд╛рдиреНрдп рд╣реИ ...
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:- V3010 рдлрд╝рдВрдХреНрд╢рди ' GetType ' рдХреЗ рд░рд┐рдЯрд░реНрди рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдирд┐рд░реНрджреЗрд╢ .cs 36
- V3080 рд╕рдВрднрд╡ рдЕрд╢рдХреНрддрддрд╛ ред рдирд┐рд░реАрдХреНрд╖рдг 'рдУ' рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдирд┐рд░реНрджреЗрд╢ .cs 36
рдпрд╣рд╛рдБ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рдпрдж рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред
рдЕрдВрдХ 14рдЖрдЗрдП рдПрдХ рдФрд░ рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ рд╣рдо "рдмрд╛рд╣рд░ рд╕реЗ" рд╕рдВрднрд╛рд▓ рд▓реЗрдВрдЧреЗред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдХреЛрдб рд▓рд┐рдЦреЗрдВрдЧреЗ, рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВрдЧреЗ рдФрд░ рдлрд┐рд░ рд╣рдо рдЕрдВрджрд░ рджреЗрдЦреЗрдВрдЧреЗред рд╣рдо рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП
System.Configuration.ConfigurationManager рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рд╕рдорд╛рди рдирд╛рдо NuGet рдкреИрдХреЗрдЬ рд▓реЗрдВрдЧреЗред рдореИрдВрдиреЗ 4.5.0 рд╕рдВрд╕реНрдХрд░рдг рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рд╣рдо
System.Configuration.CommaDelimitedStringCollection рдХреНрд▓рд╛рд╕ рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗред
рдЖрдЗрдП рдХреБрдЫ рдЕрдирдлреНрд░реЗрдВрдб рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВрдЧреЗ, рдЗрд╕рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рдирд┐рдХрд╛рд▓реЗрдВрдЧреЗ рдФрд░ рдЗрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд▓рдВрдмрд╛рдИ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ, рдлрд┐рд░ рдЗрд╕реЗ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВрдЧреЗред рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХреЛрдб:
CommaDelimitedStringCollection collection = new CommaDelimitedStringCollection(); Console.WriteLine(collection.ToString().Length);
рдмрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо
ToString рд╡рд┐рдзрд┐ рд╡рд┐рд╡рд░рдг рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВрдЧреЗ:
рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ - рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдмрд╛рд╣рд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░реВрдБрдЧрд╛ docs.microsoft.com - "
CommaDelimitedStringCollection.ToString рд╡рд┐рдзрд┐ "ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣рд╛рдВ рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ рд╣реИред
рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ, рдФрд░ ...
рд╣рдореНрдо, рдЖрд╢реНрдЪрд░реНрдпред рдареАрдХ рд╣реИ, рдЖрдЗрдП рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдПрдХ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рдЙрд╕рдХрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдЕрдЧрд▓рд╛, рд╣рдо "рдмрд┐рд▓рдХреБрд▓ рдЕрдХрд╕реНрдорд╛рдд" рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЬреЛрдбрд╝реЗрдВрдЧреЗ :)ред рдХреЛрдб рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
CommaDelimitedStringCollection collection = new CommaDelimitedStringCollection(); collection.Add(String.Empty); Console.WriteLine(collection.ToString().Length);
рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ ...
рдХреНрдпрд╛, рдлрд┐рд░ рд╕реЗ ?! рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдЕрдВрдд рдореЗрдВ
CommaDelimitedStringCollection рд╡рд░реНрдЧ рд╕реЗ
ToString рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдХреЛрдб рдиреАрдЪреЗ рд╣реИ:
public override string ToString() { if (Count <= 0) return null; StringBuilder sb = new StringBuilder(); foreach (string str in this) { ThrowIfContainsDelimiter(str);
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:- V3108 рдпрд╣ 'ToSting' (') рд╡рд┐рдзрд┐ рд╕реЗ' null 'рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИред StringAttributeCollection.cs 57
- V3108 рдпрд╣ 'ToSting' (') рд╡рд┐рдзрд┐ рд╕реЗ' null 'рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИред StringAttributeCollection.cs 71
рдпрд╣рд╛рдВ рд╣рдо 2 рдЯреБрдХрдбрд╝реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╡рд░реНрддрдорд╛рди
ToString рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рд╢реВрдиреНрдп рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддрд╛ рд╣реИ
ред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рд╣рдо Microsoft рджреНрд╡рд╛рд░рд╛
ToString рдкрджреНрдзрддрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреЛ рдпрд╛рдж рдХрд░реЗрдВрдЧреЗред рддреЛ рдЪрд▓реЛ docs.microsoft.com рд╕реЗ рдкрд░рд╛рдорд░реНрд╢ рдХрд░реЗрдВ - "
Object.ToString рд╡рд┐рдзрд┐ ":
рдЗрдирд╣реЗрд░рд┐рдЯрд░реНрд╕ рдХреЛ рдиреЛрдЯреНрд╕ .... ToString рдХреЗ рдУрд╡рд░рд░рд╛рдЗрдб () рд╡рд┐рдзрд┐ рдХреЛ рдЗрди рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:- ....
- рдЖрдкрдХрд╛ ToString () рдУрд╡рд░рд░рд╛рдЗрдб рдХреЛ рдЦрд╛рд▓реА рдпрд╛ рдЕрд╢рдХреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╣реАрдВ рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП ред
- ....
рдпрд╣ рд╡рд╣реА рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИред рдКрдкрд░ рджрд┐рдП рдЧрдП рджреЛ рдХреЛрдб рдЕрдВрд╢ рдЬреЛ рд╣рдо рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦ рд░рд╣реЗ рдереЗ, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд┐рдХрд╛рд╕ рдмрд┐рдВрджреБ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ - рдХреНрд░рдорд╢рдГ рдкрд╣рд▓рд╛ рдФрд░ рджреВрд╕рд░рд╛
рд╢реВрдиреНрдп рд░рд┐рдЯрд░реНрди рдЕрдВрдХред рдЪрд▓реЛ рдереЛрдбрд╝рд╛ рдЧрд╣рд░рд╛ рдЦреЛрджреЗрдВред
рдкрд╣рд▓рд╛ рдорд╛рдорд▓рд╛ред
рдХрд╛рдЙрдВрдЯ StringCollection class рдХрд╛ рдПрдХ рдЧреБрдг рд╣реИред рдЪреВрдВрдХрд┐ рдХреЛрдИ рддрддреНрд╡ рдирд╣реАрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рдереЗ,
рдЧрд┐рдирддреА == 0 , рд╕реНрдерд┐рддрд┐
рдЧрд┐рдирддреА <= 0 рд╕рддреНрдп рд╣реИ,
рд╢реВрдиреНрдп рдорд╛рди рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИред
рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдордиреЗ рддрддреНрд╡ рдХреЛ рдЬреЛрдбрд╝рд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП
CommaDelimitedStringCollection.Add рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
public new void Add(string value) { ThrowIfReadOnly(); ThrowIfContainsDelimiter(value); _modified = true; base.Add(value.Trim()); }
рдЪреЗрдХ
рдереНрд░реЛрдЗрдлрд╝ рдореЗрдВ рд╕рдлрд▓ рд╣реИрдВ
... рд╡рд┐рдзрд┐ рдФрд░ рддрддреНрд╡ рдХреЛ рдЖрдзрд╛рд░ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░,
рдЧрдгрдирд╛ рдореВрд▓реНрдп 1 рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм рд╣рдо
ToString рд╡рд┐рдзрд┐ рдкрд░ рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп
рдЧрдгрдирд╛ <= 0 -
рдЧрд▓рдд рд╣реИ , рдЗрд╕рд▓рд┐рдП рд╡рд┐рдзрд┐ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖрддреА рд╣реИ рдФрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдЬрд╛рд░реА рд╣реИред рдЖрдВрддрд░рд┐рдХ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рддрддреНрд╡ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ 2 рддрддреНрд╡ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ - рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдПрдХ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдоред рдирддреАрдЬрддрди, рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐
sb рдореЗрдВ рдХреЗрд╡рд▓ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рд╣реЛрддрд╛ рд╣реИ, рдХреНрд░рдорд╢рдГ
рд▓рдВрдмрд╛рдИ рдЧреБрдг рдХрд╛ рдорд╛рди рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдорд╛рди
sb .Length> 0 рд╕рдЪ рд╣реИ , рдШрдЯрд╛рд╡ рдФрд░
sb рдореЗрдВ рд▓рд┐рдЦрдирд╛ред
рдЧрддрд┐ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдм рдорд╛рди
sb.Length 0. рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐
рд╢реВрдиреНрдп рдорд╛рди рдлрд┐рд░ рд╕реЗ рд╡рд┐рдзрд┐ рд╕реЗ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИред
рдЕрдВрдХ 15рдЕрдЪрд╛рдирдХ, рдореБрдЭреЗ рдХреНрд▓рд╛рд╕
System.Configuration.ConfigurationProperty рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд▓рд╛рд▓рд╕рд╛ рд╣реЛ рдЧрдИред рдЖрдЗрдП рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ:
public ConfigurationProperty( string name, Type type, object defaultValue, TypeConverter typeConverter, ConfigurationValidatorBase validator, ConfigurationPropertyOptions options, string description);
рдЖрдЗрдП рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рд╡рд┐рд╡рд░рдг рджреЗрдЦреЗрдВ:
рд╡рд╣реА рдбреЙрдХреНрд╕.рдорд╛рдЗрдХреЛрд▓реЙрдЬреА рдбреЙрдЯ рдХреЙрдо рдкрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╡рд┐рд╡рд░рдг рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдЦреИрд░, рдЖрдЗрдП рдПрдХ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
public ConfigurationProperty(...., string description) { ConstructorInit(name, type, options, validator, typeConverter); SetDefaultValue(defaultValue); }
рдорд╛рдиреЛ рдпрд╛ рди рдорд╛рдиреЛ, рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3117 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ 'рд╡рд┐рд╡рд░рдг' рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред ConfigurationProperty.cs 62
рд╢рд╛рдпрдж, рдХреЛрдб рд▓реЗрдЦрдХ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдВрдмрдВрдзрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рд╡рд░реНрдгрди рдмрд╣реБрдд рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред
рдЕрдВрдХ 16рдпрд╣рд╛рдВ рдПрдХ рдФрд░ рд╕рдорд╛рди рдЯреБрдХрдбрд╝рд╛ рд╣реИ: рд╕реНрд╡рдпрдВ рддреНрд░реБрдЯрд┐ рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдореИрдВ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╛ рдХреЛрдб рджреЗ рд░рд╣рд╛ рд╣реВрдВред
internal SectionXmlInfo( string configKey, string definitionConfigPath, string targetConfigPath, string subPath, string filename, int lineNumber, object streamVersion, string rawXml, string configSource, string configSourceStreamName, object configSourceStreamVersion, string protectionProviderName, OverrideModeSetting overrideMode, bool skipInChildApps) { ConfigKey = configKey; DefinitionConfigPath = definitionConfigPath; TargetConfigPath = targetConfigPath; SubPath = subPath; Filename = filename; LineNumber = lineNumber; StreamVersion = streamVersion; RawXml = rawXml; ConfigSource = configSource; ConfigSourceStreamName = configSourceStreamName; ProtectionProviderName = protectionProviderName; OverrideModeSetting = overrideMode; SkipInChildApps = skipInChildApps; }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3117 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ 'configSourceStreamVersion' рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реЗрдХреНрд╢рди XmlInfo.cs 16
рдПрдХ рдЙрдкрдпреБрдХреНрдд рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ:
internal object ConfigSourceStreamVersion { set { } }
рдЖрдорддреМрд░ рдкрд░, рдХреЛрдб рд╕рдВрджрд┐рдЧреНрдз рд▓рдЧрддрд╛ рд╣реИред рд╢рд╛рдпрдж рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ / рд╕рдВрдкрддреНрддрд┐ рдЫреЛрдбрд╝ рджреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди рд╣реИред
рдЕрдВрдХ 17рдЖрдЗрдП
System.Runtime.WindowsRuntime.UI.Xaml рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рд╕рдорд╛рди-рдирд╛рдо рдкреИрдХреЗрдЬ рдХреЛрдб рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╛рдордЧреНрд░реА рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
public struct RepeatBehavior : IFormattable { .... public override string ToString() { return InternalToString(null, null); } .... }
PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3108 рдпрд╣ 'рдЯреЙрд╕рд┐рдВрдЧ' () рд╡рд┐рдзрд┐ рд╕реЗ 'null' рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред рд░рд┐рдкреАрдЯрдмрд╣реЗрд╡рд┐рдпрд░ред 113
рдкрд░рд┐рдЪрд┐рдд рдХрд╣рд╛рдиреА рдЬрд┐рд╕реЗ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ -
ToString рд╡рд┐рдзрд┐
рд╢реВрдиреНрдп рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреА рд╣реИред рдЗрд╕рдХреЗ рдХрд╛рд░рдг, рдХреЙрд▓рд░ рдХреЛрдб рдХреЗ рд▓реЗрдЦрдХ, рдЬреЛ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐
RepBehavior.ToString рд╣рдореЗрд╢рд╛ рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИ, рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдЕрдкреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ, рдпрд╣ Microsoft рдХреЗ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЦрдВрдбрди рдХрд░рддрд╛ рд╣реИред
рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рдзрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ рдХрд┐
ToString рдЕрд╢рдХреНрдд рд╣реЛ рд╕рдХрддреА рд╣реИ - рд╣рдореЗрдВ рдЗрдиреНрдЯрд░рдирд▓рдЯреЙрд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рдиреЗ рдФрд░ рдЭрд╛рдБрдХрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
internal string InternalToString(string format, IFormatProvider formatProvider) { switch (_Type) { case RepeatBehaviorType.Forever: return "Forever"; case RepeatBehaviorType.Count: StringBuilder sb = new StringBuilder(); sb.AppendFormat( formatProvider, "{0:" + format + "}x", _Count); return sb.ToString(); case RepeatBehaviorType.Duration: return _Duration.ToString(); default: return null; } }
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рд╣реИ рдХрд┐ рдпрджрд┐
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╢рд╛рдЦрд╛
рд╕реНрд╡рд┐рдЪ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд╣реИ, рддреЛ
рдЗрдВрдЯрд░рдирд▓рдЯреЙрд╕реНрдЯреНрд░рд┐рдВрдЧ рдЕрд╢рдХреНрдд рдорд╛рди рд▓реМрдЯрд╛рдПрдЧрд╛ред рдЗрд╕рд▓рд┐рдП,
ToString рднреА
рдЕрд╢рдХреНрдд рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред
рд░рд┐рдкреАрдЯрдмрд┐рд╣рд╛рд░ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рдФрд░
ToString рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд┐рдзрд┐ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо
RepBehavior рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВрдЧреЗ,
рдЗрд╕рдореЗрдВ рд╕реЗ
ToString рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдРрд╕рд╛ рдХрд░рддреЗ рд╕рдордп рд╣рдореЗрдВ рдпрд╣ рдпрд╛рдж рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐
_Type рджреЛрд╣рд░рд╛рдПрдБBehaviorType.Forever ,
рджреЛрд╣рд░рд╛рдПрдБBehaviorType.Count рдпрд╛
repeatBehaviorType.Duration рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
_рдкреНрд░рднреБ рдПрдХ рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░ рд╣реИ, рдЬрд┐рд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
public struct RepeatBehavior : IFormattable { .... private RepeatBehaviorType _Type; .... public RepeatBehaviorType Type { get { return _Type; } set { _Type = value; } } .... }
рдЕрдм рддрдХ, рдЗрддрдирд╛ рдЕрдЪреНрдЫрд╛ред рдЪрд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐
RepBehaviorType рдкреНрд░рдХрд╛рд░ рдХреНрдпрд╛ рд╣реИред
public enum RepeatBehaviorType { Count, Duration, Forever }
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ,
RepBehaviorType рд╕рднреА рддреАрди рддрддреНрд╡реЛрдВ рд╕реЗ рдпреБрдХреНрдд рдЧрдгрди рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реА, рдЗрди рддреАрдиреЛрдВ рддрддреНрд╡реЛрдВ рдХреЛ рдЙрд╕
рд╕реНрд╡рд┐рдЪ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╢рд╛рдЦрд╛ рдкрд╣реБрдВрдЪ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред
рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо
System.Runtime.WindowsRuntime.UI.Xaml рдкреИрдХреЗрдЬ рдХрд╛ рд╕рдВрджрд░реНрдн рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВрдЧреЗ (рдореИрдВ 4.3.0 рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛) рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реВрдВред
RepeatBehavior behavior = new RepeatBehavior() { Type = (RepeatBehaviorType)666 }; Console.WriteLine(behavior.ToString() is null);
рдЯреНрд░реВ рдореЗрдВ рдХрдВрд╕реЛрд▓ рдХреЛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐
ToString рд╡рд╛рдкрд╕ рд▓реМрдЯ рдЖрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐
_Type рдХреЗрд╕ рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рдХрд┐рд╕реА рднреА рдорд╛рди рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рдерд╛, рдФрд░
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╢рд╛рдЦрд╛ рдиреЗ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред рдпрд╣реА рд╣рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рдереЗред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рди рддреЛ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдЯрд┐рдкреНрдкрдгреА, рди рд╣реА
docs.microsoft.com рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐
рд╢реВрдиреНрдп рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреА рд╣реИред
рдЕрдВрдХ 18рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо
System.PStreet.DataContractSerialization рд╕реЗ рдХрдИ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВрдЧреЗред
private static class CharType { public const byte None = 0x00; public const byte FirstName = 0x01; public const byte Name = 0x02; public const byte Whitespace = 0x04; public const byte Text = 0x08; public const byte AttributeText = 0x10; public const byte SpecialWhitespace = 0x20; public const byte Comment = 0x40; } private static byte[] s_charType = new byte[256] { .... CharType.None, CharType.None| CharType.Comment| CharType.Comment| CharType.Whitespace| CharType.Text| CharType.SpecialWhitespace, CharType.None| CharType.Comment| CharType.Comment| CharType.Whitespace| CharType.Text| CharType.SpecialWhitespace, CharType.None, CharType.None, CharType.None| CharType.Comment| CharType.Comment| CharType.Whitespace, CharType.None, .... };
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:- V3001 рдмрд╛рдИрдВ рдФрд░ '' рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ 'CharType.Comment' рд╣реИрдВред рдСрдкрд░реЗрдЯрд░ред XmlUTF8TextReader.cs 56
- V3001 рдмрд╛рдИрдВ рдФрд░ '' рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ 'CharType.Comment' рд╣реИрдВред рдСрдкрд░реЗрдЯрд░ред XmlUTF8TextReader.cs 58
- V3001 рдмрд╛рдИрдВ рдФрд░ '' рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ 'CharType.Comment' рд╣реИрдВред рдСрдкрд░реЗрдЯрд░ред XmlUTF8TextReader.cs 64
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ
CharType.Comment | CharType.Comment рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрджрд┐рдЧреНрдз рдкрд╛рдпрд╛ред рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ, рдЬреИрд╕рд╛
(CharType.Comment | CharType.Comment) == CharType.Comment ред рдЕрдиреНрдп рд╕рд░рдгреА рддрддреНрд╡реЛрдВ рдХреЛ рдЖрд░рдореНрдн рдХрд░рддреЗ рд╕рдордп, рдЬреЛ
CharType.Comment рдХрд╛ рдЙрдкрдпреЛрдЧ
рдХрд░рддреЗ рд╣реИрдВ , рдРрд╕рд╛ рдХреЛрдИ рджреЛрд╣рд░рд╛рд╡ рдирд╣реАрдВ рд╣реИред
рдЕрдВрдХ 19рдЪрд▓рд┐рдП рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рдЖрдЗрдП
XmlBinaryWriterSession.TryAdd рд╡рд┐рдзрд┐ рдХреЗ рд╡рд┐рд╡рд░рдг рдкрд░ рд╡рд┐рдзрд┐ рд╡рд┐рд╡рд░рдг рдФрд░ docs.microsoft.com рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦреЗрдВ - "
XmlBinaryWriterSession.TryAdd (Xml retardString, Int32) рд╡рд┐рдзрд┐ ":
рд░рд┐рдЯрд░реНрди: рдЕрдЧрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдЕрдиреНрдпрдерд╛, рдЕрд╕рддреНрдпредрдЕрдм рдЖрдЗрдП рд╡рд┐рдзрд┐ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рджреЗрдЦреЗрдВ:
public virtual bool TryAdd(XmlDictionaryString value, out int key) { IntArray keys; if (value == null) throw System.Runtime .Serialization .DiagnosticUtility .ExceptionUtility .ThrowHelperArgumentNull(nameof(value)); if (_maps.TryGetValue(value.Dictionary, out keys)) { key = (keys[value.Key] - 1); if (key != -1) {
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3009 рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╣рдореЗрд╢рд╛ рдПрдХ рдФрд░ 'рд╕рдорд╛рди' рдорд╛рди рдХрд╛ рд░рд┐рдЯрд░реНрди рдХрд░рддреА рд╣реИред XmlBinaryWriterSession.cs 29
рдпрд╣ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдпрд╛ рддреЛ
рд╕рдЪ рд╣реЛ рдЬрд╛рддреА
рд╣реИ рдпрд╛ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрддреА рд╣реИ, рд▓реЗрдХрд┐рди
рдЧрд▓рдд рдореВрд▓реНрдп рдХрднреА рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред
рдЕрдВрдХ 20рдореИрдВ рдПрдХ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рд╛рде рдХреЛрдб рдореЗрдВ рдЖрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд - рд╡рд┐рдзрд┐ рд╣рдореЗрд╢рд╛
рдЭреВрдареА рд╣реЛрддреА рд╣реИ :
internal virtual bool OnHandleReference(....) { if (xmlWriter.depth < depthToCheckCyclicReference) return false; if (canContainCyclicReference) { if (_byValObjectsInScope.Contains(obj)) throw ....; _byValObjectsInScope.Push(obj); } return false; }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3009 рдпрд╣ рд╡рд┐рдЪрд┐рддреНрд░ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╣рдореЗрд╢рд╛ рдПрдХ рдФрд░ 'рд╕рдорд╛рди' рдореВрд▓реНрдп рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреА рд╣реИред XmlObjectSerializerWriteContext.cs 415
рдЦреИрд░, рд╣рдо рдкрд╣рд▓реЗ рд╣реА рдПрдХ рд▓рдВрдмрд╛ рд╕рдлрд░ рддрдп рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ! рдЗрд╕рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЫреЛрдЯрд╛ рдмреНрд░реЗрдХ рд╣реИ: рдЕрдкрдиреА рдорд╛рдВрд╕рдкреЗрд╢рд┐рдпреЛрдВ рдХреЛ рд╣рд┐рд▓рд╛рдПрдВ, рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдореЗрдВ, рдЕрдкрдиреА рдЖрдВрдЦреЛрдВ рдХреЛ рдЖрд░рд╛рдо рджреЗрдВ, рдЦрд┐рдбрд╝рдХреА рд╕реЗ рдмрд╛рд╣рд░ рджреЗрдЦреЗрдВ ...
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЖрдк рдлрд┐рд░ рд╕реЗ рдКрд░реНрдЬрд╛ рд╕реЗ рднрд░реЗ рд╣реЛрдВрдЧреЗ, рддреЛ рдЪрд▓рд┐рдП рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред :)
рдЕрдВрдХ 21рдЪрд▓рд┐рдП
System.Security.Cryptography.Algorithms рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдХреБрдЫ рдЖрдХрд░реНрд╖рдХ рдЕрдВрд╢реЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред
public override byte[] GenerateMask(byte[] rgbSeed, int cbReturn) { using (HashAlgorithm hasher = (HashAlgorithm)CryptoConfig.CreateFromName(_hashNameValue)) { byte[] rgbCounter = new byte[4]; byte[] rgbT = new byte[cbReturn]; uint counter = 0; for (int ib = 0; ib < rgbT.Length;) {
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3080 рд╕рдВрднрд╛рд╡рд┐рдд
рдЕрд╢рдХреНрддрддрд╛ ред 'рд╣реИрд╢рд░' рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред PKCS1MaskGenerationMethod.cs 37
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИ рдХрд┐
рд╣реИрд╢рд░ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддреЗ рд╕рдордп
рд╣реИрд╢рд░ рдЪрд░ рдХрд╛ рдореВрд▓реНрдп
рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
ред рдЯреНрд░рд╛рдВрд╕рдлрд╝реНрд▓реЙрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
NullReferenceException рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣реЛрддреА рд╣реИред рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рдХреА рдШрдЯрдирд╛ рдЕрдВрддрд░рдкреНрд░рд╛рдВрддреАрдп рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдХрд╛рд░рдг рд╕рдВрднрд╡ рд╣реЛ рдЧрдИред
рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛
рд╣реИрд╢рд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ
рдЕрд╢рдХреНрдд рдореВрд▓реНрдп рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рд╣рдореЗрдВ
CreateFromName рд╡рд┐рдзрд┐ рдореЗрдВ рдбреБрдмрдХреА рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
public static object CreateFromName(string name) { return CreateFromName(name, null); }
рдЕрдм рддрдХ рдХреБрдЫ рдирд╣реАрдВ - рдЪрд▓реЛ рдЧрд╣рд░рд╛рдИ рддрдХ рдЪрд▓рддреЗ рд╣реИрдВред рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдУрд╡рд░рд▓реЛрдбреЗрдб
CreateFromName рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╢рд░реАрд░ рдХрд╛рдлреА рдмрдбрд╝рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд▓рдШреБ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗрддрд╛ рд╣реВрдВред
public static object CreateFromName(string name, params object[] args) { .... if (retvalType == null) { return null; } .... if (cons == null) { return null; } .... if (candidates.Count == 0) { return null; } .... if (rci == null || typeof(Delegate).IsAssignableFrom(rci.DeclaringType)) { return null; } .... return retval; }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рдзрд┐ рдореЗрдВ рдХрдИ рдирд┐рдХрд╛рд╕ рдмрд┐рдВрджреБ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╢реВрдиреНрдп рдорд╛рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХрдо рд╕реЗ рдХрдо рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдКрдкрд░ рдХреА рд╡рд┐рдзрд┐ рдореЗрдВ, рдЬреЛ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ, NullReferenceException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИредрд╕рд┐рджреНрдзрд╛рдВрдд рдорд╣рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдореВрд▓ рд╡рд┐рдзрд┐ рдкрд░ рдПрдХ рдФрд░ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВрдЧреЗ рдФрд░ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рд╡рд┐рдзрд┐ рд╕реЗ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХреЛрдб рдХреЛ рдХрдо рдХрд░ рджреЗрдВрдЧреЗред public class PKCS1MaskGenerationMethod : ....
рдЖрдЗрдП рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:1, 3 ред рдХреНрд▓рд╛рд╕ рдФрд░ рдореЗрдердб рдореЗрдВ рдкрдмреНрд▓рд┐рдХ рдПрдХреНрд╕реЗрд╕ рдореЛрдбрд┐рдлрд╛рдпрд░реНрд╕ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╕рдордп рдЙрдкрд▓рдмреНрдз рд╣реИ - рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредреи ред рд╡рд░реНрдЧ рдЧреИрд░-рд╕рд╛рд░ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирд┐рд░реНрдорд╛рддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЬрд┐рд╕ рдкрд░ рдореИрдВрдиреЗ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛, рдХрдХреНрд╖рд╛рдПрдВ рдЕрдореВрд░реНрдд рдереАрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░рд┐рдпреЛрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рдереАредрек ред CreateFromName рдмрд╣реБрдд рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐рд╕реА рднреА рдЕрдкрд╡рд╛рдж рдФрд░ рдмрд╣реБрдд рдЬрд░реВрд░реА рд╡рд╛рдкрд╕реА рдХрдерди рдЙрддреНрдкрдиреНрди рдЕрд╢рдХреНрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рд╕реЗ рд╣реЛрдЧрд╛ рд╕рдмрд╕реЗ, <br> рд╣рдо рдЖрдкрдХреЛ рд╡рд╛рдкрд╕ рдЗрд╕реЗ рдкрд╛рдиреЗ рдХреЗ рдмрд╛рдж -редрел, рем ред рдХреА cbReturnрдорд╛рди> 0 рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рд▓реЗрдХрд┐рди, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХрд┐рд╕реА рд╕рд░рдгреА рдХреЗ рд╕рдлрд▓ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реАрдорд╛ рдХреЗ рднреАрддрд░)ред CbReturn рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди > 0 рд╕реНрдерд┐рддрд┐ рдЖрдЧреЗ рдХреА рд╕реНрдерд┐рддрд┐ ib <rgbT.Length рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдФрд░ рд▓реВрдк рдмреЙрдбреА рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ ред7 ред Helpres.ConvertIntToByteArray рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПредрдЙрди рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╡рд┐рдзрд┐ рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЙрдкрдпреБрдХреНрдд рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:- rgbCeed - рдирдИ рдмрд╛рдЗрдЯ [] {0, 1, 2, 3};
- cbReturn - 42ред
CryptoConfig.CreateFromName рд╡рд┐рдзрд┐ рдХреЛ "рдмрджрдирд╛рдо" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП , рд╣рдореЗрдВ _hashNameValue рдлрд╝реАрд▓реНрдб рдХреЗ рдорд╛рди рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд░реНрдЧ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ: public string HashName { get { return _hashNameValue; } set { _hashNameValue = value ?? DefaultHash; } }
HashName (рдпрд╛рдиреА _hashNameValue) рдХреЗ рд▓рд┐рдП 'рд╕рд┐рдВрдереЗрдЯрд┐рдХ' рдорд╛рди рд╕реЗрдЯ рдХрд░рдХреЗ , рд╣рдо рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдП рдЧрдП рдкрд╣рд▓реЗ рдирд┐рдХрд╛рд╕ рдмрд┐рдВрджреБ рдкрд░ CreateFromName рд╡рд┐рдзрд┐ рд╕реЗ рд╢реВрдиреНрдп рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдореИрдВ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛ (рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдореБрдЭреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВрдЧреЗ), рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдзрд┐ рдХрд╛рдлреА рдмрдбрд╝реА рд╣реИред рдирддреАрдЬрддрди, рдХреЛрдб рдЬреЛ NullReferenceException рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рдЬрдиреНрдо рджреЗрдЧрд╛ , рд╡рд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ: PKCS1MaskGenerationMethod tempObj = new PKCS1MaskGenerationMethod(); tempObj.HashName = "Dummy"; tempObj.GenerateMask(new byte[] { 1, 2, 3 }, 42);
рдЕрдм рд╣рдо рдбрд┐рдмрдЧрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:рдмрд╕ рдЗрд╕рдХреЗ рдордЬрд╝реЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ 4.3.1 рд╕рдВрд╕реНрдХрд░рдг рдХреЗ NuGet рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрд╕реА рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛редрдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ, рд╡рд┐рдзрд┐ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕реАрдорд╛рдПрдВ рд╣реИрдВред Docs.microsoft.com PKCS1MaskGenerationMethod.GenerateMask (рдмрд╛рдЗрдЯ [], Int32) рд╡рд┐рдзрд┐ "рдпрд╛ рддреЛ рдЗрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреА рд╣реИредрд╡реИрд╕реЗ, рд▓реЗрдЦ рд▓рд┐рдЦрддреЗ рд╕рдордп рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХреНрд░рдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реБрдП, рдореБрдЭреЗ 2 рдФрд░ рддрд░реАрдХреЗ рдорд┐рд▓реЗред рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ "рддреЛрдбрд╝реЗрдВ":- cbReturn рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдорд╛рди рдкрд╛рд╕ рдХрд░реЗрдВ ;
- rgbSeed рдХреЗ рд░реВрдк рдореЗрдВ рд╢реВрдиреНрдп рдорд╛рди рдкрд╛рд╕ рдХрд░реЗрдВ ред
рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ OutOfMemoryException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рдорд┐рд▓реЗрдЧрд╛ редрджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо rgbSeed.Length рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп NullReferenceException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЙрд╕ рд╣реИрд╢рд░ рдХрд╛ рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рдорд╛рди рд╣реИред рдЕрдиреНрдпрдерд╛, рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ rgbSeed.Length рдХреЛ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ ред рдЕрдВрдХ 22 рдореИрдВ рдРрд╕реЗ рд╣реА рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЖрдпрд╛ рдерд╛ред public class SignatureDescription { .... public string FormatterAlgorithm { get; set; } public string DeformatterAlgorithm { get; set; } public SignatureDescription() { } .... public virtual AsymmetricSignatureDeformatter CreateDeformatter( AsymmetricAlgorithm key) { AsymmetricSignatureDeformatter item = (AsymmetricSignatureDeformatter) CryptoConfig.CreateFromName(DeformatterAlgorithm); item.SetKey(key);
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:- V3080 рд╕рдВрднрд╡ рдЕрд╢рдХреНрддрддрд╛ ред 'рдЖрдЗрдЯрдо' рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред SignatureDescription.cs 31
- V3080 рд╕рдВрднрд╡ рдЕрд╢рдХреНрддрддрд╛ ред 'рдЖрдЗрдЯрдо' рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред SignatureDescription.cs 38
рджреЛрдмрд╛рд░рд╛, FormatterAl рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ DeformatterAl рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЧреБрдгреЛрдВ рдореЗрдВ рд╣рдо рдРрд╕реЗ рдорд╛рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП CryptoConfig.CreateFromName рд╡рд┐рдзрд┐ CreateDeformatter рдФрд░ CreateFormatter рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╢реВрдиреНрдп рдорд╛рди рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрдм SetKey рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ , рддреЛ рдПрдХ NullReferenceException рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛ред рд╕рдорд╕реНрдпрд╛, рдлрд┐рд░ рд╕реЗ, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреБрди: рдкреЗрд╢ рдХреА рдЬрд╛рддреА рд╣реИ: SignatureDescription signature = new SignatureDescription() { DeformatterAlgorithm = "Dummy", FormatterAlgorithm = "Dummy" }; signature.CreateDeformatter(null);
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЬрдм CreateDeformatter рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде CreateFormatter рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ NullReferenceException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрд╕рдорд╕реНрдпрд╛ 23 рд╕рд┐рд╕реНрдЯрдо System.Street.Xml рдкреНрд░реЛрдЬреЗрдХреНрдЯрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЕрдВрд╢реЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВ ред public override void WriteBase64(byte[] buffer, int index, int count) { if (!_inAttr && (_inCDataSection || StartCDataSection())) _wrapped.WriteBase64(buffer, index, count); else _wrapped.WriteBase64(buffer, index, count); }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3004 'рддрддреНрдХрд╛рд▓реАрди' рдХрдерди 'рдФрд░' рдХрдерди рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред QueryOutputWriterV1.cs 242рдпрд╣ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддрдм рдФрд░ рдпрджрд┐ рд╡рд┐рд╡рд░рдг рдХреЗ рдЕрдиреНрдп рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рд╕рдорд╛рди рдХреЛрдб рд╣реЛрддрд╛ рд╣реИред рдпрд╛ рддреЛ рдпрд╣рд╛рдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ рдФрд░ рдПрдХ рд╢рд╛рдЦрд╛ рдореЗрдВ рдПрдХ рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЬрд╛рдиреА рд╣реИ, рдпрд╛ рдпрджрд┐ рдХрдерди рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдВрдХ 24 internal void Depends(XmlSchemaObject item, ArrayList refs) { .... if (content is XmlSchemaSimpleTypeRestriction) { baseType = ((XmlSchemaSimpleTypeRestriction)content).BaseType; baseName = ((XmlSchemaSimpleTypeRestriction)content).BaseTypeName; } else if (content is XmlSchemaSimpleTypeList) { .... } else if (content is XmlSchemaSimpleTypeRestriction) { baseName = ((XmlSchemaSimpleTypeRestriction)content).BaseTypeName; } else if (t == typeof(XmlSchemaSimpleTypeUnion)) { .... } .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3003 'if (A) {...} рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдЧрд░ (A) {...}' рдкреИрдЯрд░реНрди рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ред рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЛрдВ: 381, 396. ImportContext.cs 381рдореЗрдВ рд╕реЗ рдЕрдЧрд░-рдмрд╛рдХреА-рдпрджрд┐ рдЕрдиреБрдХреНрд░рдо рдХреЛ рджреЛ рджреЛ рд╕рд╢рд░реНрдд рднрд╛рд╡ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИрдВ - XmlSchemaSimpleTypeRestriction рд╕рд╛рдордЧреНрд░реА рд╣реИ ред рдХреНрдпрд╛ рдЕрдзрд┐рдХ рд╣реИ, рддрддреНрдХрд╛рд▓реАрди рд╡рдХреНрддрд╡реНрдпреЛрдВ рдХреА рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рд╕рдореВрд╣ рд╣реЛрддрд╛ рд╣реИред рд╡реИрд╕реЗ рднреА, рдпрд╛ рддреЛ рдкрд╣рд▓реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХреЗ рд╢рд░реАрд░ рддреЛ рд╢рд╛рдЦрд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдЬрд╛рдПрдЧреА (рдпрджрд┐ рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕рддреНрдп рд╣реИ), рдпрд╛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЕрдЧрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЧрд▓рдд рд╣реИредрдЕрдВрдХ 25рдЕрдЧрд▓реА рд╡рд┐рдзрд┐ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдкреЗрдЪреАрджрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдкреВрд░реЗ рд╢рд░реАрд░ рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреВрдВрдЧрд╛ред public bool MatchesXmlType(IList<XPathItem> seq, int indexType) { XmlQueryType typBase = GetXmlType(indexType); XmlQueryCardinality card; switch (seq.Count) { case 0: card = XmlQueryCardinality.Zero; break; case 1: card = XmlQueryCardinality.One; break; default: card = XmlQueryCardinality.More; break; } if (!(card <= typBase.Cardinality)) return false; typBase = typBase.Prime; for (int i = 0; i < seq.Count; i++) { if (!CreateXmlType(seq[0]).IsSubtypeOf(typBase)) return false; } return true; }
рдпрджрд┐ рдЖрдкрдиреЗ рдирдХрд▓ рдХреА рд╣реИ - рдмрдзрд╛рдИ!рдпрджрд┐ рдирд╣реАрдВ - рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ: рдПрдХ рд▓реВрдк рдХреЗ рдЕрдВрджрд░ рдирд┐рд░рдВрддрд░ рд╕реВрдЪрдХрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ 'seq' рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рддрддреНрд╡ рддрдХ V3102 рд╕рдВрджрд┐рдЧреНрдз рдкрд╣реБрдВрдЪред XmlQueryRuntime.cs 738рдХреЗ рд▓рд┐рдП рдкрд╛рд╢ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореИрдВ <seq.Count рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд╣рд╛рд▓рдд рдХрд╛ рд╕рд╛рде рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реАрдХреНрд╡ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ред рд▓реЗрдХрд┐рди рд▓реВрдк рдореЗрдВ, рд▓реЗрдЦрдХ рдХрд╛рдЙрдВрдЯрд░ - seq [i] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрдХреНрд░рдо рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ , рд▓реЗрдХрд┐рди рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд╢рд╛рдмреНрджрд┐рдХ - рд╢реВрдиреНрдп ( seq [0] )редрд╕рдорд╕реНрдпрд╛ 26рдЕрдЧрд▓реА рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрдо рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИред public override void WriteValue(string value) { WriteValue(value); }
PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3110 'WriteValue' рдкрджреНрдзрддрд┐ рдХреЗ рдЕрдВрджрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдирдВрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ред XmlAttributeCache.cs 166рд╡рд┐рдзрд┐ рдЦреБрдж рдХреЛ рдХреЙрд▓ рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд┐рдирд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реЛрддреА рд╣реИредрдЕрдВрдХ 27 public IList<XPathNavigator> DocOrderDistinct(IList<XPathNavigator> seq) { if (seq.Count <= 1) return seq; XmlQueryNodeSequence nodeSeq = (XmlQueryNodeSequence)seq; if (nodeSeq == null) nodeSeq = new XmlQueryNodeSequence(seq); return nodeSeq.DocOrderDistinct(_docOrderCmp); }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3095 рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'seq' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 880, 884. XmlQueryRuntime.cs 880рд╡рд┐рдзрд┐ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╢реВрдиреНрдп рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреА рд╣реИред рдЗрд╕рдХреЗ рдХрд╛рд░рдг, рдХрд╛рдЙрдВрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╕рдордп , NullReferenceException type рдХрд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдЬреЗрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЪрд░ рдХреЗ рдиреАрдЪреЗ рдиреЛрдбрд╕реЗрдХ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред рдиреЛрдбрд╕реЗрдХ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд╕реАрдХ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдлрд┐рд░ рднреА рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЪреЗрдХ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ seq рдорд╛рди рд╢реВрдиреНрдп рд╣реИ , рддреЛ рдЕрдкрд╡рд╛рдж рдХреЗ рдХрд╛рд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдЗрд╕ рдЪреЗрдХ рдХреЛ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ред рдпрджрд┐ seq рдорд╛рди рдирд╣реАрдВ рд╣реИрдЕрд╢рдХреНрдд , рдлрд┐рд░:- рдпрджрд┐ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рддреЛ InvalidCastException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛;
- рдпрджрд┐ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рд╕рдлрд▓ рд╣реИ, рддреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдиреЛрдбрд╕реИрдХ рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ ред
рд╕рдорд╕реНрдпрд╛ 28рдореИрдВ 4 рдмрд┐рд▓реНрдбрд░реЛрдВ рдХреЗ рдкрд╛рд░ рдЖрдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдЕрдкреНрд░рдпреБрдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдереЗред рд╢рд╛рдпрдж, рдЙрдиреНрд╣реЗрдВ рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрди рдЕрдкреНрд░рдпреБрдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рдорд┐рд▓реАредрдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:- V3117 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ 'SecurityUrl' рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред XmlSecureResolver.cs 15
- V3117 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ 'strdata' рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред XmlEntity.cs 18
- V3117 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ 'рд╕реНрдерд╛рди' рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрдХрд▓рди .cs 58
- V3117 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ 'рдПрдХреНрд╕реЗрд╕' рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред XmlSerializationILGen.cs 38
рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдиреЗ рдореБрдЭреЗ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рджрд┐рд▓рдЪрд╕реНрдкреА рджреА (рдХрдо рд╕реЗ рдХрдо, рдпрд╣ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдЪреЗрддрд╛рд╡рдиреА рдХреА рд╕реВрдЪреА рдореЗрдВ рдорд┐рд▓рд╛)ред рдХреНрдпрд╛ рдЦрд╛рд╕ рд╣реИ? рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛ред рд╢рд╛рдпрдж, рдЗрд╕рдХрд╛ рдирд╛рдоред public XmlSecureResolver(XmlResolver resolver, string securityUrl) { _resolver = resolver; }
рдмрд╕ рд╣рд┐рдд рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЬрд╛рдБрдЪ рдХреА рдХрд┐ docs.microsoft.com рдкрд░ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ - " XmlSecureResolver Constructors " SecurityUrl рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ :URL рдЬреЛ PermissionSet рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд XmlResolver рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛ред XmlSecureResolver рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд XmlResolver рдкрд░ GetEntity (Uri, рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдЯрд╛рдЗрдк) рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ PermitOnly () рдмрдирд╛рдП рдЧрдП PermissionSet рдкрд░ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИредрдЕрдВрдХ 29рдореЗрдВ рд╕реЗ System.Private.Uri рдкреИрдХреЗрдЬ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╡рд┐рдзрд┐, рдХреА! рдореИрдВ рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдерд╛ рдкрд░ Microsoft рджрд┐рд╢рд╛ рдирд┐рд░реНрджреЗрд╢реЛрдВ ToString рд╡рд┐рдзрд┐ рдЕрдзрд┐рднрд╛рд╡реАред рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдкреГрд╖реНрда " Object.ToString рд╡рд┐рдзрд┐ " рд╕реЗ рдпреБрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдпрд╛рдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ :рдЖрдкрдХреЗ ToString () рдУрд╡рд░рд░рд╛рдЗрдб рдХреЛ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдлреЗрдВрдХрдирд╛ рдЪрд╛рд╣рд┐рдП редрдУрд╡рд░рд░рд╛рдЗрдб рд╡рд┐рдзрд┐ рд╕реНрд╡рдпрдВ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ: public override string ToString() { if (_username.Length == 0 && _password.Length > 0) { throw new UriFormatException(SR.net_uri_BadUserPassword); } .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3108 рдпрд╣ 'ToSting ()' рд╡рд┐рдзрд┐ рд╕реЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдлреЗрдВрдХрдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рд╣реИред UriBuilder.cs 406рдХреЛрдб рдкрд╣рд▓реА рдмрд╛рд░ _username рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд┐рдХреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЧреБрдг UserName рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд░рдорд╢рдГ _password рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрд╝реИрд░-рд░рд┐рдХреНрдд рд╣реИ ред рдЗрд╕рдХреЗ рдмрд╛рдж рдЗрд╕реЗ ToString рд╡рд┐рдзрд┐ рдХрд╣рддреЗ рд╣реИрдВред рдЖрдЦрд┐рд░рдХрд╛рд░ рдЗрд╕ рдХреЛрдб рдХреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдорд┐рд▓реЗрдЧрд╛ред рдРрд╕реЗ рдХреЛрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг: UriBuilder uriBuilder = new UriBuilder() { UserName = String.Empty, Password = "Dummy" }; String stringRepresentation = uriBuilder.ToString(); Console.WriteLine(stringRepresentation);
рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЕрдкрд╡рд╛рдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рдФрд░ docs.microsoft.com рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ - " UriBuilder.ToString рд╡рд┐рдзрд┐ "редрд╕рдорд╕реНрдпрд╛ 30, System.Data.Common рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб рдкрд░ рдЬрд╛рд░реА рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ ред private ArrayList _tables; private DataTable GetTable(string tableName, string ns) { .... if (_tables.Count == 0) return (DataTable)_tables[0]; .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3106 рд╕рдВрднрд╡рддрдГ рд╕реВрдЪрдХрд╛рдВрдХ рдмрд╛рдзреНрдп рд╣реИред '0' рдЗрдВрдбреЗрдХреНрд╕ '_tables' рдмрд╛рдЙрдВрдб рд╕реЗ рдкрд░реЗ рдЗрдВрдЧрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред XMLDiffLoader.cs 277рдХреНрдпрд╛ рдХреЛрдб рдХрд╛ рдпрд╣ рдЯреБрдХрдбрд╝рд╛ рдЕрд╕рд╛рдорд╛рдиреНрдп рджрд┐рдЦрддрд╛ рд╣реИ? рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдпрд╣ рдХреНрдпрд╛ рд╣реИ? ArgumentOutOfRangeException type рдХрд╛ рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛ ? рдореБрдЭреЗ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдпрд╣ рдмрд╣реБрдд рд╣реА рдЕрдЬреАрдм рдФрд░ рд╕рдВрджрд┐рдЧреНрдз рдХреЛрдб рд╣реИредрдЕрдВрдХ 31 internal XmlNodeOrder ComparePosition(XPathNodePointer other) { RealFoliate(); other.RealFoliate(); Debug.Assert(other != null); .... }
PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3095 'рдЕрдиреНрдп' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдпрд╣ рдЕрд╢рдХреНрдд рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓рд╛рдЗрдиреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ: 1095, 1096. XPathNodePointer.cs 1095рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рдЕрдиреНрдп = рдЕрд╢рдХреНрдд! рдХрд╛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ Debug.Assert рд╡рд┐рдзрд┐ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ ComparePosition рд╡рд┐рдзрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЕрд╢рдХреНрдд рдПрдХ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдХреЗ рд░реВрдк рдореЗрдВ рдореВрд▓реНрдп рдХрд╛ред рдХрдо рд╕реЗ рдХрдо, рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдЕрдиреНрдп. RealFoliate рдЖрд╡реГрддреНрддрд┐ рд╡рд┐рдзрд┐ рдХреЗ рдКрдкрд░ рдХреА рд░реЗрдЦрд╛ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрджрд┐ рдЕрдиреНрдп рдореЗрдВ рдЕрд╢рдХреНрдд рдорд╛рди рд╣реИ, рддреЛ NullReferenceException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж Assert рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ редрдЕрдВрдХ 32 private PropertyDescriptorCollection GetProperties(Attribute[] attributes) { .... foreach (Attribute attribute in attributes) { Attribute attr = property.Attributes[attribute.GetType()]; if ( (attr == null && !attribute.IsDefaultAttribute()) || !attr.Match(attribute)) { match = false; break; } } .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3080 рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╢рдХреНрддрддрд╛ ред 'рдЕрдЯрд░' рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред DbConnectionStringBuilder.cs 534 рдпрджрд┐ рдХрдердирдХреА рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛рдлреА рд╕рдВрджрд┐рдЧреНрдз рд▓рдЧрддреА рд╣реИред рдорд┐рд▓рд╛рди рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдзрд┐ рд╣реИред рдЪреЗрдХ рдЕрдЯрд░ == рдирд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ , рдЕрд╢рдХреНрдд рдЗрд╕ рдЪрд░ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░реНрдп (рдЕрдкреЗрдХреНрд╖рд┐рдд) рдореВрд▓реНрдп рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рд╕рд╣реА рдСрдкрд░реЗрдВрдб рдХреЗ рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реИ || рдСрдкрд░реЗрдЯрд░ (рдпрджрд┐ attr - null ), рд╣рдореЗрдВ NullReferenceException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рдорд┐рд▓реЗрдЧрд╛ ред рддрджрдиреБрд╕рд╛рд░, рдЕрдкрд╡рд╛рдж рдШрдЯрдирд╛ рдХреА рд╢рд░реНрддреЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИрдВ:- The value of attr тАФ null . The right operand of the && operator is evaluated.
- The value of !attribute.IsDefaultAttribute() тАФ false . The overall result of the expression with the && operator тАФ false .
- Since the left operand of the || operator is of the false value, the right operand is evaluated.
- Since attr тАФ null , when calling the Match method, an exception is generated.
Issue 33 private int ReadOldRowData( DataSet ds, ref DataTable table, ref int pos, XmlReader row) { .... if (table == null) { row.Skip();
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3021 рд╕рдорд╛рди рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рджреЛ 'рдпрджрд┐' рдХрдерди рд╣реИрдВред рдкрд╣рд▓реЗ 'if' рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рдореЗрдердб рд░рд┐рдЯрд░реНрди рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рджреВрд╕рд░рд╛ 'рдЕрдЧрд░' рдмрдпрд╛рди рдмреЗрд╣реЛрд╢ XMLDiffLoader.cs рд╣реИ 301рд╡рд╣рд╛рдБ рджреЛ рджреЛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЕрдЧрд░ - рдмрдпрд╛рди, рдмрд░рд╛рдмрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдпреБрдХреНрдд рддрд╛рд▓рд┐рдХрд╛ == рдмрд╛рддрд┐рд▓ ред рдЙрд╕ рдХреЗ рд╕рд╛рде, рдлрд┐рд░ рдЗрди рдХрдердиреЛрдВ рдХреА рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ - рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд┐рдзрд┐ -1 рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреА рд╣реИ, рджреВрд╕рд░реЗ рдореЗрдВ - рдПрдХ рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рджреЕ рддрд╛рд▓рд┐рдХрд╛ рдЪрд░ рдЬрд╛рдВрдЪреЛрдВ рдХреЗ рдмреАрдЪ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдорд╛рдирд╛ рдЧрдпрд╛ рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрдЧрд╛редрд╕рдорд╕реНрдпрд╛ 34 System.ComponentModelрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдзрд┐ рджреЗрдЦреЗрдВ редTypeConverterрдкрд░рд┐рдпреЛрдЬрдирд╛ред рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдкрд╣рд▓реЗ рдЯрд┐рдкреНрдкрдгреА рдкрдврд╝рддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:рд╕реНрд╡рд░реВрдкрд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдЕрдВрддрд┐рдо рд╡рд░реНрдг рдХреЛ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИред (рд╡рд░реНрдЪреБрдЕрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдЕрдВрддрд┐рдо рд╡рд░реНрдг рдирд┐рдХрд╛рд▓реЗрдВ)ред рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░ рдкрд░рдо рдореЗрдВ рд╡рд╣ рд╕реНрдерд┐рддрд┐ рд╣реЛрддреА рд╣реИ рдЬрд╣рд╛рдВ рдСрдкрд░реЗрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рд╕реНрдерд┐рддрд┐ рдкрд░реАрдХреНрд╖рдг рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╣реИред MaskedTextResultHint out param рдСрдкрд░реЗрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рджреЗрддрд╛ рд╣реИред рд╕рдлрд▓рддрд╛ рдкрд░ рд╕рдЪ рд▓реМрдЯрд╛рддрд╛ рд╣реИ , рдЕрдиреНрдпрдерд╛ рдЧрд▓рдд редрд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдкрд░ рдореБрдЦреНрдп рдмрд┐рдВрджреБ: рдпрджрд┐ рдХреЛрдИ рдСрдкрд░реЗрд╢рди рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рд╕рд╣реА рд╣реЛ рдЬрд╛рддреА рд╣реИ , рдЕрдиреНрдпрдерд╛ - рдЧрд▓рдд ред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред public bool Remove(out int testPosition, out MaskedTextResultHint resultHint) { .... if (lastAssignedPos == INVALID_INDEX) { .... return true;
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3009 рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╣рдореЗрд╢рд╛ рдПрдХ рдФрд░ 'рд╕рдорд╛рди' рдорд╛рди рдХрд╛ рд░рд┐рдЯрд░реНрди рдХрд░рддреА рд╣реИред MaskedTextProvider.cs 1529рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рд╕рдЪ рд╣реИ редрдЕрдВрдХ 35 public void Clear() { if (_table != null) { .... } if (_table.fInitInProgress && _delayLoadingConstraints != null) { .... } .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3125 '_table' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрдм рдЗрд╕реЗ null рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреНрд╕: 437, 423. ConstraintCollection.cs 437The _table! = Null рдЪреЗрдХ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдмреЛрд▓рддрд╛ рд╣реИ - _table рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рд╢реВрдиреНрдп рдорд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХрдо рд╕реЗ рдХрдо, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЛрдб рд▓реЗрдЦрдХреЛрдВ рдХреЛ рдкреБрдирд░реНрдмреАрдорд╛ рдорд┐рд▓рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкрддрд╛ рдиреАрдЪреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд╖реЗрддреНрд░ _table рд▓реЗрдХрд┐рди рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдХреЗ рдмрд┐рдирд╛ рдЕрд╢рдХреНрдд - _table .fInitInProgress редрдЕрдВрдХ 36рдЖрдЗрдП рдЕрдм рдХрдИ рдЪреЗрддрд╛рд╡рдиреА, рдХреЗ рд▓рд┐рдП, рдХреЗ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдЬрд╛рд░реА рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ System.Runtime.Serialization.Formatters рдкрд░рд┐рдпреЛрдЬрдирд╛ред private void Write(....) { .... if (memberNameInfo != null) { .... _serWriter.WriteObjectEnd(memberNameInfo, typeNameInfo); } else if ((objectInfo._objectId == _topId) && (_topName != null)) { _serWriter.WriteObjectEnd(topNameInfo, typeNameInfo); .... } else if (!ReferenceEquals(objectInfo._objectType, Converter.s_typeofString)) { _serWriter.WriteObjectEnd(typeNameInfo, typeNameInfo); } }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3038 рддрд░реНрдХ рдХрдИ рдмрд╛рд░ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЕрдиреНрдп рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред BinaryObjectWriter.cs 262рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдЕрдВрддрд┐рдо рдХреЙрд▓ _serWriter.WriteObjectEnd рджреНрд╡рд╛рд░рд╛ рджреЛ рд╕рдорд╛рди рддрд░реНрдХ - typeNameInfo рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред рдпрд╣ рдПрдХ рдЯрд╛рдЗрдкреЛ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ред рдореИрдВрдиреЗ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдХрд┐ рдХреИрд▓реАрд▓реЗрдУрдСрдмрдЬреЗрдХреНрдЯ рдИрдВрдб рд╡рд┐рдзрд┐ рдХреНрдпрд╛ рд╣реИ ред internal void WriteObjectEnd(NameInfo memberNameInfo, NameInfo typeNameInfo) { }
рдЕрдЪреНрдЫрд╛ ... рдЪрд▓реЛ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред :)
рдЕрдВрдХ 37 internal void WriteSerializationHeader( int topId, int headerId, int minorVersion, int majorVersion) { var record = new SerializationHeaderRecord( BinaryHeaderEnum.SerializedStreamHeader, topId, headerId, minorVersion, majorVersion); record.Write(this); }
рдЗрд╕ рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╕рдордп, рдореИрдВ рдПрдХ рдмрд╛рд░ рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ рдпрд╛ рдХреНрдпрд╛ рд╕рдВрджрд┐рдЧреНрдз рд╣реИред рд▓реЗрдХрд┐рди рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдмрд╛рдд рдХреНрдпрд╛ рд╣реИредPVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3066 рд╕рдВрднрд╛рд╡рд┐рдд рдЧрд▓рдд рдЖрджреЗрд╢ 'SerializationHeaderRecord' рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рджрд┐рдпрд╛: 'minorVersion' рдФрд░ 'majorVersion'ред BinaryFormatterWriter.cs 111 SerializationHeaderRecord рд╡рд░реНрдЧрдХреЗ рдХреИрд▓реА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рджреЗрдЦреЗрдВ ред internal SerializationHeaderRecord( BinaryHeaderEnum binaryHeaderEnum, int topId, int headerId, int majorVersion, int minorVersion) { _binaryHeaderEnum = binaryHeaderEnum; _topId = topId; _headerId = headerId; _majorVersion = majorVersion; _minorVersion = minorVersion; }
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдСрд░реНрдбрд░ рдореЗрдЬрд░рд╡реЗрд╢рди , рдорд╛рдЗрдиреЙрд░рд╡реЗрд╢рди рдореЗрдВ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реИрдВ ; рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдмреБрд▓рд╛рддреЗ рд╕рдордп рд╡реЗ рдЗрд╕ рдХреНрд░рдо рдореЗрдВ рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ: рдорд╛рдЗрдиреЙрд░рд╡реЗрд╢рди , рдореЗрдЬрд░рд╡рд░реНрд╕рди ред рдПрдХ рдЯрд╛рдЗрдкреЛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдЬрд╛рдирдмреВрдЭрдХрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЕрдЧрд░ рдХреНрдпрд╛?) - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЯрд┐рдкреНрдкрдгреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАредрдЕрдВрдХ 38 internal ObjectManager( ISurrogateSelector selector, StreamingContext context, bool checkSecurity, bool isCrossAppDomain) { _objects = new ObjectHolder[DefaultInitialSize]; _selector = selector; _context = context; _isCrossAppDomain = isCrossAppDomain; }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3117 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ 'checkSecurity' рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред ObjectManager.cs 33 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░рдХрд╛ рдЪреЗрдХрд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА рдкреИрд░рд╛рдореАрдЯрд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрд╕ рдкрд░ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реИрд╕реЗ рднреА, рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╕реБрд░рдХреНрд╖рд╛ рдмрд╛рддрдЪреАрдд рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧ рд░рд╣рд╛ рд╣реИредрд╕рдорд╕реНрдпрд╛ 39рдпрд╣рд╛рдБ рд╡рд╣ рдХреЛрдб рд╣реИ рдЬреЛ рдореБрдЭреЗ рдЕрд╕рд╛рдорд╛рдиреНрдп рд▓рдЧрд╛ред рдкреИрдЯрд░реНрди рддреАрдиреЛрдВ рдЬреНрдЮрд╛рдд рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдПрдХ рдФрд░ рд╕рдорд╛рди рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ рд╕рдорд╛рди рдирд╛рдо рдФрд░ рдЪрд░ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред рдирддреАрдЬрддрди:- рдпрд╛ рддреЛ рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рджреЛрд╣рд░рд╛рд╡ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдмреБрджреНрдз рдирд╣реАрдВ рд╣реВрдВ;
- рдпрд╛ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рддреНрд░реБрдЯрд┐ рдлреИрд▓рд╛рдИ рдЧрдИ рдереАред
рдХреЛрдб рд╣реА: private void EnlargeArray() { int newLength = _values.Length * 2; if (newLength < 0) { if (newLength == int.MaxValue) { throw new SerializationException(SR.Serialization_TooManyElements); } newLength = int.MaxValue; } FixupHolder[] temp = new FixupHolder[newLength]; Array.Copy(_values, 0, temp, 0, _count); _values = temp; }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:- V3022 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'newLength == int.MaxValue' рд╣рдореЗрд╢рд╛ рдЭреВрдареА рд╣реИред ObjectManager.cs 1423
- V3022 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'newLength == int.MaxValue' рд╣рдореЗрд╢рд╛ рдЭреВрдареА рд╣реИред ObjectManager.cs 1511
- V3022 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'newLength == int.MaxValue' рд╣рдореЗрд╢рд╛ рдЭреВрдареА рд╣реИред ObjectManager.cs 1558
рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдореЗрдВ рдЬреЛ рдЕрд▓рдЧ рд╣реИ рд╡рд╣ рдЕрд╕реНрдерд╛рдпреА рд╕рд░рдгреА рддрддреНрд╡реЛрдВ ( рдлрд┐рдХреНрд╕рдЕрдкрд╣реЛрд▓рд░ рдирд╣реАрдВ , рдмрд▓реНрдХрд┐ рд▓реЙрдиреНрдЧ рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ ) рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЕрднреА рднреА рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд╛ рд╕рдВрджреЗрд╣ рд╣реИ ... System.Data.Odbc рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрд╕рдорд╕реНрдпрд╛ 40рдХреЛрдб ред public string UnquoteIdentifier(....) { .... if (!string.IsNullOrEmpty(quotePrefix) || quotePrefix != " ") { .... } .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3022 рдПрдХреНрд╕рдкреНрд░реЗрд╢рди '! String.IsNullOrEmpty (quotePrefix) || quotPrefix! = "" "рд╣рдореЗрд╢рд╛ рд╕рддреНрдп рд╣реЛрддрд╛ рд╣реИред OdbcCommandBuilder.cs 338рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рджреА рдЧрдИ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рд╣рдореЗрд╢рд╛ рд╕рд╣реА рдореВрд▓реНрдп рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рд╣реИред рдЗрд╕рд╕реЗ рднреА рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдЯрдкреНрд░рд┐рдлрд╝рд┐рдХреНрд╕ рдореЗрдВ рдХреНрдпрд╛ рдореВрд▓реНрдп рд╣реИ - рд╕реНрдерд┐рддрд┐ рдЦреБрдж рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд▓рд┐рдЦреА рдЧрдИ рд╣реИред рдЖрдЗрдП рдЗрд╕рдХреА рддрд╣ рддрдХ рдЬрд╛рдПрдВредрд╣рдорд╛рд░реЗ рдкрд╛рд╕ || рдСрдкрд░реЗрдЯрд░, рдЗрд╕рд▓рд┐рдП рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рд╕рд╣реА рд╣реЛрдЧрд╛ , рдпрджрд┐ рдмрд╛рдПрдВ рдпрд╛ рджрд╛рдПрдВ (рдпрд╛ рджреЛрдиреЛрдВ) рдСрдкрд░реЗрдВрдб рдХрд╛ рд╕рд╣реА рдореВрд▓реНрдп рд╣реЛрдЧрд╛ред рдпрд╣ рдмрд╛рдИрдВ рдУрд░ рдХреЗ рд╕рд╛рде рд╕рдм рд╕реНрдкрд╖реНрдЯ рд╣реИред рджрд╛рдПрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗрд╡рд▓ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рдмрд╛рдИрдВ рдУрд░ рдЭреВрда рд╣реИрдореВрд▓реНрдпред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ, рдпрджрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рд╣реИ рдХрд┐ рд╕рд╣реА рдСрдкрд░реЗрдВрдб рдХрд╛ рдореВрд▓реНрдп рд╣рдореЗрд╢рд╛ рд╕рд╣реА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдмрд╛рдИрдВ рдУрд░ рдХрд╛ рдорд╛рди рдЧрд▓рдд рд╣реЛрддрд╛ рд╣реИ , рддреЛ рдкреВрд░реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╕рд╣реА рд╣реЛрдЧрд╛ редрдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рд╕реЗ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рд╕рд╣реА рдСрдкрд░реЗрдВрдб рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдорд╛рдиред INNOOEEpty (quotPrefix) - рд╕рдЪ рд╣реИ , рдЗрд╕рд▓рд┐рдП рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рдХрдерди рд╕рддреНрдп рд╣реИ:- quotPrefix == null ;
- quotPrefix.Length == 0 ред
рдпрджрд┐ рдЗрди рдХрдердиреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рдПрдХ рд╕рддреНрдп рд╣реИ, рддреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЙрджреНрдзрд░рдгрдкреНрд░реЗрдо! = "" рднреА рд╕рддреНрдп рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рд╣рдо рд╕рд┐рджреНрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗред рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрдкреВрд░реНрдг рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рд╣рдореЗрд╢рд╛ рд╕рд╣реА рд╣реЛрддрд╛ рд╣реИ , рднрд▓реЗ рд╣реА рдмреЛрд▓реАрдкреНрд░рд┐рдлрд╝рд┐рдХреНрд╕ рд╕рд╛рдордЧреНрд░реА рд╣реЛредрд╕рдорд╕реНрдпрд╛ 41рдЕрдкреНрд░рдпреБрдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рд╡рд╛рд▓реЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реЛрдВ рдореЗрдВ рд╡рд╛рдкрд╕ рдЬрд╛рдирд╛: private sealed class PendingGetConnection { public PendingGetConnection( long dueTime, DbConnection owner, TaskCompletionSource<DbConnectionInternal> completion, DbConnectionOptions userOptions) { DueTime = dueTime; Owner = owner; Completion = completion; } public long DueTime { get; private set; } public DbConnection Owner { get; private set; } public TaskCompletionSource<DbConnectionInternal> Completion { get; private set; } public DbConnectionOptions UserOptions { get; private set; } }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3117 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ 'userOptions' рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред DbConnectionPool.cs 26рд╣рдо рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдФрд░ рдХреЛрдб рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо , рдФрд░ рдЕрдиреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдорд╛рди рдирд╛рдо рдЧреБрдгреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдЧреБрдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛редрд╕рдорд╕реНрдпрд╛ 42рдПрдХ рд╕рдВрджрд┐рдЧреНрдз рдХреЛрдб рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо 2 рдмрд╛рд░ рднрд░ рдЪреБрдХреЗ рд╣реИрдВред рдкреИрдЯрд░реНрди рдПрдХ рд╣реА рд╣реИред private DataTable ExecuteCommand(....) { .... foreach (DataRow row in schemaTable.Rows) { resultTable.Columns .Add(row["ColumnName"] as string, (Type)row["DataType"] as Type); } .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:- V3051 рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреА рдбрд╛рд▓реАред рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 'рдЯрд╛рдЗрдк' рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИред DbMetaDataFactory.cs 176
- V3051 рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреА рдбрд╛рд▓реАред рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 'рдЯрд╛рдЗрдк' рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИред OdbcMetaDataFactory.cs 1109
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (рдкреНрд░рдХрд╛рд░) рдкрдВрдХреНрддрд┐ ["DataType"] рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрд╛рд░ рд╕рдВрджрд┐рдЧреНрдз рд▓рдЧ рд░рд╣рд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рд╣реЛрдЧрд╛, рдХреЗ рдмрд╛рдж рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ - рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХреЗ рд░реВрдк рдореЗрдВ рдСрдкрд░реЗрдЯрд░ рдХреАред рдпрджрд┐ рдорд╛рди рдкрдВрдХреНрддрд┐ ["рдбреЗрдЯрд╛ рдЯрд╛рдЗрдк"] - рдЕрд╢рдХреНрдд рд╣реИ, рддреЛ рдпрд╣ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рджреЛрдиреЛрдВ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ 'рдкрд╛рд╕' рд╣реЛрдЧрд╛ рдФрд░ рдРрдб рдкрджреНрдзрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░реЗрдЧрд╛ ред рдпрджрд┐ рдкрдВрдХреНрддрд┐ ["DataType"] рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЯрд╛рдЗрдк рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдирд╣реАрдВ рдбрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ , рддреЛ InvalidCastException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рд╕реНрдкрд╖реНрдЯ рдХрд╛рд╕реНрдЯ рдХреЗ рджреМрд░рд╛рди рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛ред рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ рдпрд╣рд╛рдВ рджреЛ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рд╕рд╡рд╛рд▓ рдЦреБрд▓рд╛ рд╣реИредрдЕрдВрдХ 43рдЖрдЗрдП рд╕рдВрджрд┐рдЧреНрдз рдЯреБрдХрдбрд╝реЗ рдХреЛ рджреЗрдЦреЗрдВSystem.Runtime.InteropServices.RuntimeInformation ред public static string FrameworkDescription { get { if (s_frameworkDescription == null) { string versionString = (string)AppContext.GetData("FX_PRODUCT_VERSION"); if (versionString == null) { .... versionString = typeof(object).Assembly .GetCustomAttribute< AssemblyInformationalVersionAttribute>() ?.InformationalVersion; .... int plusIndex = versionString.IndexOf('+'); .... } .... } .... } }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3105 ' versionString ' рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрдм рдЗрд╕реЗ null- рд╕рд╢рд░реНрдд рдСрдкрд░реЗрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рдерд╛ред NullReferenceException рд╕рдВрднрд╡ рд╣реИред RuntimeInformation.cs 29рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рдПрдХ NullReferenceException рдкреНрд░рдХрд╛рд░ рдЬрдм рдмреБрд▓рд╛рдиреЗ рдХреА indexOf рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ VersionString рдЪрд░ред рдПрдХ рдЪрд░ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп, рдХреЛрдб рд▓реЗрдЦрдХ '?' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред InfromationalVersion рдЧреБрдг рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдкрд░ рдСрдкрд░реЗрдЯрд░ NullReferenceException рдЕрдкрд╡рд╛рдж рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП ред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЕрдЧрд░ рдХреА рдХреЙрд▓ рдХреА рдЪрд╛рд▓ рд╣реИ GetCustomAttribute <...> рд░рд┐рдЯрд░реНрди рдЕрд╢рдХреНрддрдПрдХ рдЕрдкрд╡рд╛рдж рдЕрднреА рднреА рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдиреАрдЪреЗ - рдЬрдм IndexOf рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ , рдЬреИрд╕рд╛ рдХрд┐ рд╡рд░реНрдЬрдирд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╢реВрдиреНрдп рдорд╛рди рд╣реЛрдЧрд╛редрд╕рдорд╕реНрдпрд╛ 44рдЖрдЗрдП System.ComponentModel.Composition рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХрдИ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рд▓рд┐рдП рджреЛ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреА рдЧрдИ рдереАрдВ: public static bool CanSpecialize(....) { .... object[] genericParameterConstraints = ....; GenericParameterAttributes[] genericParameterAttributes = ....;
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:- V3125 рд╢реВрдиреНрдп рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж 'рдЬреЗрдиреЗрд░рд┐рдХрдкреИрд░рдореАрдЯрд░рдХреЙрд╕реНрдЯреНрд░реЗрдиреНрдЯреНрд╕' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 603, 589. рдЬреЗрдиреЗрд░рд┐рдХ рд╕реНрдкреЗрд╢рд▓рд╛рдЗрдЬрд╝реЗрд╢рдирдкрд╛рд░реНрдЯрдХреНрд░рд┐рдпрдирдЗрдиреНрдлреЛ.рдлреЙрд░реНрдореНрд╕ 603
- V3125 рд╢реВрдиреНрдп рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж 'рдЬреЗрдиреЗрд░рд┐рдХрдкреИрд░реЗрдЯ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 604, 594. рдЬреЗрдиреЗрд░рд┐рдХ рд╕реНрдкреЗрд╢рд▓рд╛рдЗрдЬрд╝реЗрд╢рдирдкрд╛рд░реНрдЯрдХреНрд░рд┐рдпрдирдЗрдиреНрдлреЛ.рдлреЙрд░реНрдореНрд╕ 604
рдХреЛрдб рдореЗрдВ рдЬреЗрдиреЗрд░рд┐рдХрдкреИрд░реЗрдЯрд░реАрдПрдЯреНрдпреВрдПрдВрдЯреНрд╕ рдХреЗ рдЪреЗрдХ рд╣реИрдВ ! = Null рдФрд░ рдЬреЗрдиреЗрд░рд┐рдХрдкреИрд░рдореАрдЯрд░рдЪреЗрд╕реНрдЯреНрд░реЗрдиреНрдЯреНрд╕! = = рдореБрд▓ ред рдЗрд╕рд▓рд┐рдП, рдЗрди рдЪрд░ рдХреЗ рд▓рд┐рдП рд╢реВрдиреНрдп - рд╕реНрд╡реАрдХрд╛рд░реНрдп рдорд╛рди, рд╣рдо рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдВрдЧреЗред рдпрджрд┐ рджреЛрдиреЛрдВ рдЪрд░ рдореЗрдВ рд╢реВрдиреНрдп рдорд╛рди рд╣реИ, рддреЛ рд╣рдо рдЗрд╕ рд╡рд┐рдзрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВрдЧреЗ, рдХреЛрдИ рд╕рд╡рд╛рд▓ рдирд╣реАрдВред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рджреЛ рдЪрд░ рдореЗрдВ рд╕реЗ рдПрдХ рд╢реВрдиреНрдп рд╣реИ , рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╣рдо рд╡рд┐рдзрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдирд┐рдХрд▓рддреЗ рд╣реИрдВ? рдпрджрд┐ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рд▓реВрдк рдЯреНрд░реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ NullReferenceException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рдорд┐рд▓реЗрдЧрд╛ редрдЕрдВрдХ 45рдЖрдЧреЗ рд╣рдо рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЪреЗрддрд╛рд╡рдиреА рдХреА рдУрд░ рдмрдврд╝реЗрдВрдЧреЗред рдФрд░ рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЪрд▓реЛ рдХреБрдЫ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ - рдкрд╣рд▓реЗ рд╣рдо рдлрд┐рд░ рд╕реЗ рдХрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдлрд┐рд░ рдХреЛрдб рджреЗрдЦреЗрдВрдЧреЗред рдЕрдЧрд▓рд╛, рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЕрдВрддрд┐рдо рдЙрдкрд▓рдмреНрдз рдкреНрд░реАрд▓реЗрд░реЗрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рдорд╛рди-рдирд╛рдо NuGet рдкреИрдХреЗрдЬ рдХрд╛ рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝реЗрдВрдЧреЗ (рдореИрдВрдиреЗ рд╕рдВрд╕реНрдХрд░рдг 4.6.0-рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 6.19303.8 рдХрд╛ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд░рд▓ рдХреЛрдб рд▓рд┐рдЦреЗрдВ: LazyMemberInfo lazyMemberInfo = new LazyMemberInfo(); var eq = lazyMemberInfo.Equals(null); Console.WriteLine(eq);
рдХреЗ рдмрд░рд╛рдмрд░ рд╡рд┐рдзрд┐ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдХрд╛ рдХреЗрд╡рд▓ .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдпреЗ docs.microsoft.com рдПрдЯреА рдиреЗрдЯ рдХреЛрд░ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдпрджрд┐ рд╣рдо рдЗрд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ (" LazyMemberInfo.Equals (Object) Method ") - рддреЛ рд╣рдореЗрдВ рдХреБрдЫ рднреА рд╡рд┐рд╢реЗрд╖ рдирд╣реАрдВ рджрд┐рдЦреЗрдЧрд╛ рдХрд┐ рдпрд╣ рд╕рд╣реА рд╣реИ рдпрд╛ рдЧрд▓рдд , рд░рд┐рдЯрд░реНрди рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред рд╣рдо рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рджреЗрдЦреЗрдВрдЧреЗ:рд╣рдо рдереЛрдбрд╝рд╛ рдореБрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЖрдЙрдЯрдкреБрдЯ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: LazyMemberInfo lazyMemberInfo = new LazyMemberInfo(); var eq = lazyMemberInfo.Equals(typeof(String)); Console.WriteLine(eq);
рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдоредрджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдпреЗ рджреЛрдиреЛрдВ рдЕрдкрд╡рд╛рдж рдПрдХ рд╣реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред рдЖрдЗрдП рдЗрдирд╕рд┐рдбреЗрдЯ рдмрд░рд╛рдмрд░реА рд╡рд┐рдзрд┐ рджреЗрдЦреЗрдВред public override bool Equals(object obj) { LazyMemberInfo that = (LazyMemberInfo)obj;
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3115 'null' рдХреЛ 'рдмрд░рд╛рдмрд░' рдкрджреНрдзрддрд┐ рд╕реЗ 'NullReferenceException' рдореЗрдВ рдкрд░рд┐рдгрд╛рдорд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред LazyMemberInfo.cs 116рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдереЛрдбрд╝рд╛ рдкреЗрдВрдЪ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдиреЗ that._memberType рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреА рдереА ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрд╡рд╛рдж рд╣реЛрддреЗ рд╣реИрдВ (LazyMemberInfo) obj ред рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕рдХрд╛ рдиреЛрдЯ рдмрдирд╛ рд▓рд┐рдпрд╛ рд╣реИредрдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА InvalidCastException рдХреЗ рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рд╣реИ ред NullReferenceException рдХреНрдпреЛрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ LazyMemberInfo рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдЕрдирдмреЙрдХреНрд╕ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдХреЗ рдЕрд╢рдХреНрдд рдореВрд▓реНрдп unboxing рд╕реБрд╡рд┐рдзрд╛ рдХреА, рдмрд╛рд░реА-рдмрд╛рд░реА,NullReferenceException рдХреЗ рдЕрдкрд╡рд╛рдж рдХреА рдШрдЯрдирд╛ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИрдЯрд╛рдЗрдк рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЯрд╛рдЗрдкрд╕ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рд╣реИ - рд▓реЗрдЦрдХреЛрдВ рдХреЛ рд╢рд╛рдпрдж рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрдирд╛ рдЕрднреА рднреА рд▓реЗрдЦрдХреЛрдВ рдХреЗ рд╣рд╛рде рдореЗрдВ рд╣реИредрд╕рдорд╕реНрдпрд╛ 46рд╡реИрд╕реЗ, рдореИрдВ System.Drawing.Common рдореЗрдВ рдПрдХ рд╕рдорд╛рди рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдпрд╛ TriState рд╕рдВрд░рдЪрдирд╛ рдореЗрдВред public override bool Equals(object o) { TriState state = (TriState)o; return _value == state._value; }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3115 'null' рдХреЛ 'рдмрд░рд╛рдмрд░' рдкрджреНрдзрддрд┐ рд╕реЗ 'NullReferenceException' рдореЗрдВ рдкрд░рд┐рдгрд╛рдорд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред TriState.cs 53рд╕рдорд╕реНрдпрд╛рдПрдВ рдКрдкрд░ рдмрддрд╛рдП рдЧрдП рдорд╛рдорд▓реЗ рдХреА рддрд░рд╣ рд╣реА рд╣реИрдВредрд╕рдорд╕реНрдпрд╛ 47 System.Text.Jsonрд╕реЗ рдХрдИ рдЕрдВрд╢реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ ред рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рдХреА рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ ToString рдПрдХ рдмрдпрд╛рди рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдП рдЕрд╢рдХреНрдд ? рдЗрд╕ рдЬреНрдЮрд╛рди рдХреЛ рдареЛрд╕ рдХрд░рдиреЗ рдХрд╛ рд╕рдордпред public override string ToString() { switch (TokenType) { case JsonTokenType.None: case JsonTokenType.Null: return string.Empty; case JsonTokenType.True: return bool.TrueString; case JsonTokenType.False: return bool.FalseString; case JsonTokenType.Number: case JsonTokenType.StartArray: case JsonTokenType.StartObject: {
рдкрд╣рд▓реА рдирдЬрд░ рдореЗрдВ, рдпрд╣ рд╡рд┐рдзрд┐ рдЕрд╢рдХреНрдд рдирд╣реАрдВ рд╣реИ , рд▓реЗрдХрд┐рди рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рддрд░реНрдХ рд╣реИред PVS-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3108 рдпрд╣ 'рдЯреЙрд╕рд┐рдВрдЧ' () рд╡рд┐рдзрд┐ рд╕реЗ 'null' рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред JsonElement.cs 1460 рдЧреЗрдЯрд╕реНрдЯреНрд░рд┐рдВрдЧ () рд╡рд┐рдзрд┐рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд▓рд╛рдЗрди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ ред рдЗрд╕ рдкрд░ рдПрдХ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВред public string GetString() { CheckValidInstance(); return _parent.GetString(_idx, JsonTokenType.String); }
рдЧреЗрдЯрд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдХреЗ рдЕрддрд┐рднрд╛рд░рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЧрд╣рд░рд╛рдИ рддрдХ рдЪрд▓рддреЗ рд╣реИрдВ : internal string GetString(int index, JsonTokenType expectedType) { .... if (tokenType == JsonTokenType.Null) { return null; } .... }
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдареАрдХ рдмрд╛рдж, рдЬрд┐рд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╢реВрдиреНрдп рдорд╛рди рд╣реЛрдЧрд╛ - рдЗрд╕ рдкрджреНрдзрддрд┐ рдФрд░ ToString рджреЛрдиреЛрдВ рд╕реЗ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рд╢реБрд░реВ рдореЗрдВ рдорд╛рдирд╛ рдерд╛редрдЕрдВрдХ 48рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЕрдВрд╢: internal JsonPropertyInfo CreatePolymorphicProperty(....) { JsonPropertyInfo runtimeProperty = CreateProperty(property.DeclaredPropertyType, runtimePropertyType, property.ImplementedPropertyType, property?.PropertyInfo, Type, options); property.CopyRuntimeSettingsTo(runtimeProperty); return runtimeProperty; }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3042 рд╕рдВрднрд╛рд╡рд┐рдд NullReferenceExceptionред '?' рдФрд░ '' рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ 'рд╕рдВрдкрддреНрддрд┐' рд╡рд╕реНрддреБ JsonClassInfo.AddProperty.cs 179рдЬрдм рдлреЛрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП CreateProperty рд╡рд┐рдзрд┐, рдЧреБрдг рдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдИ рдЯрд╛рдЗрдореНрд╕ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╕рдВрдкрддреНрддрд┐ : property.DeclaredPropertyType , property.ImplementedPropertyType , рд╕рдВрдкрддреНрддрд┐ .PropertyInfo? ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЛрдб рд▓реЗрдЦрдХ '?' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдСрдкрд░реЗрдЯрд░ред
рдпрджрд┐ рдпрд╣ рдпрд╣рд╛рдВ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рд╢реВрдиреНрдп рдорд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдСрдкрд░реЗрдЯрд░ рдХрд┐рд╕реА рднреА рдорджрдж рдХрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ NullReferenceException рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рдкреНрд░рддреНрдпрдХреНрд╖ рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рде рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛редрд╕рдорд╕реНрдпрд╛ 49 рд╕рд┐рд╕реНрдЯрдо System.ecurity.Cryptography.Xml рдкреНрд░реЛрдЬреЗрдХреНрдЯрдореЗрдВ рдирд┐рдореНрди рд╕рдВрджреЗрд╣рд╛рд╕реНрдкрдж рдЯреБрдХрдбрд╝реЗ рдкрд╛рдП рдЧрдП рдереЗ ред рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдХрдИ рдмрд╛рд░ рдЕрдиреНрдп рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╣реБрдЖ рд╣реИред рдлрд┐рд░ рд╕реЗ, рдХреЛрдб рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдЗрдирдХреА рддреБрд▓рдирд╛ рд╕реНрд╡рдпрдВ рдХрд░реЗрдВред рдкрд╣рд▓рд╛ рдЯреБрдХрдбрд╝рд╛: public void Write(StringBuilder strBuilder, DocPosition docPos, AncestralNamespaceContextManager anc) { docPos = DocPosition.BeforeRootElement; foreach (XmlNode childNode in ChildNodes) { if (childNode.NodeType == XmlNodeType.Element) { CanonicalizationDispatcher.Write( childNode, strBuilder, DocPosition.InRootElement, anc); docPos = DocPosition.AfterRootElement; } else { CanonicalizationDispatcher.Write(childNode, strBuilder, docPos, anc); } } }
рджреВрд╕рд░рд╛ рдЯреБрдХрдбрд╝рд╛ред public void WriteHash(HashAlgorithm hash, DocPosition docPos, AncestralNamespaceContextManager anc) { docPos = DocPosition.BeforeRootElement; foreach (XmlNode childNode in ChildNodes) { if (childNode.NodeType == XmlNodeType.Element) { CanonicalizationDispatcher.WriteHash( childNode, hash, DocPosition.InRootElement, anc); docPos = DocPosition.AfterRootElement; } else { CanonicalizationDispatcher.WriteHash(childNode, hash, docPos, anc); } } }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:- V3061 рдкреИрд░рд╛рдореАрдЯрд░ 'docPos' рд╣рдореЗрд╢рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд┐рдзрд┐ рдирд┐рдХрд╛рдп рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред CanonicalXmlDocument.cs 37
- V3061 рдкреИрд░рд╛рдореАрдЯрд░ 'docPos' рд╣рдореЗрд╢рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд┐рдзрд┐ рдирд┐рдХрд╛рдп рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред CanonicalXmlDocument.cs 54
рджреЛрдиреЛрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ docPos рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЙрд╕рдХреЗ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╡рд┐рдзрд┐ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рди рдХреЛ рдХреЗрд╡рд▓ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрд╕рдорд╕реНрдпрд╛ 50 System.Data.SqlClient рдкреНрд░реЛрдЬреЗрдХреНрдЯрдХреЗ рдХреЛрдб рдкрд░ рдХрдИ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ ред private bool IsBOMNeeded(MetaType type, object value) { if (type.NullableType == TdsEnums.SQLXMLTYPE) { Type currentType = value.GetType(); if (currentType == typeof(SqlString)) { if (!((SqlString)value).IsNull && ((((SqlString)value).Value).Length > 0)) { if ((((SqlString)value).Value[0] & 0xff) != 0xff) return true; } } else if ((currentType == typeof(string)) && (((String)value).Length > 0)) { if ((value != null) && (((string)value)[0] & 0xff) != 0xff) return true; } else if (currentType == typeof(SqlXml)) { if (!((SqlXml)value).IsNull) return true; } else if (currentType == typeof(XmlDataFeed)) { return true;
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3095 рд╢реВрдиреНрдп рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'рдореВрд▓реНрдп' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рдБрдЪ рд▓рд╛рдЗрдиреЗрдВ: 8696, 8708. TdsParser.cs 8696рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдорд╛рди рдЪреЗрдХ рдореЗрдВ рдЙрд▓рдЭрд╛ рд╣реБрдЖ рдерд╛ ! = рдПрдХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЕрд╢рдХреНрдд ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдпрд╣ рдЦреЛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдореВрд▓реНрдп рдХрдИ рдмрд╛рд░ рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдорд╛рди рдореЗрдВ рд╢реВрдиреНрдп рдорд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдЪреАрдЬреЗрдВ рдЦрд░рд╛рдм рд╣реИрдВредрдЕрдВрдХ 51рдЕрдЧрд▓реА рддреНрд░реБрдЯрд┐ рдкрд░реАрдХреНрд╖рдгреЛрдВ рд╕реЗ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдЙрджреНрдзреГрдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред protected virtual TDSMessageCollection CreateQueryResponse(....) { .... if (....) { .... } else if ( lowerBatchText.Contains("name") && lowerBatchText.Contains("state") && lowerBatchText.Contains("databases") && lowerBatchText.Contains("db_name"))
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3053 рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ред 'рдирд╛рдо' рдФрд░ 'db_name' рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред QueryEngine.cs 151рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдмрдЯреЗрдХреНрд╢рдВрд╕ рдХреЗ рд╕рдВрдпреЛрдЬрди lowBatchText.Contains ("рдирд╛рдо") рдФрд░ LowerBatchText.Contains ("db_name") рдирд┐рд░рд░реНрдердХ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рдЪреЗрдХ рдХрд┐рдП рдЧрдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ "db_name" рд╡рд┐рдХрд▓реНрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ , рддреЛ рдЗрд╕рдореЗрдВ "рдирд╛рдо" рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ рднреА рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛ред рдпрджрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ "рдирд╛рдо" рдирд╣реАрдВ рд╣реИ , рддреЛ рдЗрд╕рдореЗрдВ "db_name" рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ ред рдирддреАрдЬрддрди, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЪреЗрдХ рд▓реЛрдЕрд░рдмреИрдЪрдЯреЗрдХреНрд╕реНрдЯ.рдХрдиреЗрдХреНрдЯ ("рдирд╛рдо")рдмреЗрдорд╛рдиреА рд╣реИред рдЬрдм рддрдХ рдпрд╣ рдЬрд╛рдБрдЪ рдХреА рдЧрдИ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ рдЬрд╛рдБрдЪ рдХреА рдЧрдИ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ "рдирд╛рдо" рдирд╣реАрдВ рд╣реИ редрд╕рдорд╕реНрдпрд╛ 52 System.Net.Requests рдкреНрд░реЛрдЬреЗрдХреНрдЯрдХреЗ рдХреЛрдб рд╕реЗ рдПрдХ рд╕рдВрджрд┐рдЧреНрдз рдЦрдВрдб ред protected override PipelineInstruction PipelineCallback( PipelineEntry entry, ResponseDescription response, ....) { if (NetEventSource.IsEnabled) NetEventSource.Info(this, $"Command:{entry?.Command} Description:{response?.StatusDescription}");
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3125 'рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рд▓рд╛рдЗрдиреЗрдВ: 270, 227. FtpControlStream.cs 270рдЬрдм рдПрдХ рдкреНрд░рдХреНрд╖реЗрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд░рдЪрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдВрдЯреНрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реЗ рднрд╛рд╡ ред рдХрдорд╛рди рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ред рд╡рд┐рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред '?' 'рдХреЗ рдмрдЬрд╛рдп рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред' рдСрдкрд░реЗрдЯрд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ NullReferenceException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ рдХрд┐рд╕реА рднреА рдЗрд╕реА рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЕрд╢рдХреНрдд рдорд╛рди рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рддрдХрдиреАрдХ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдХреЛрдб рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╢рдХреНрдд рдорд╛рди рдЕрд▓рдЧ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рдпрджрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ == рд╢реВрдиреНрдп рд╕реЗ рд╡рд┐рдзрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ)), рдЬрдмрдХрд┐ рдкреНрд░рд╡реЗрд╢ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ ред рдирддреАрдЬрддрди, рдпрджрд┐ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддреЗ рд╕рдордп рдХреЛрдб рдХреЗ рд╕рд╛рде рдЖрдЧреЗ - рд╢реВрдиреНрдп рд╣реЛред рдХреЛрдореИрдВрдб (',' рдирд╣реАрдВ, '' рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде);), рдПрдХ рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛редрдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдПрдХ рдХрд╛рдлреА рд╡рд┐рд╕реНрддреГрдд рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛ рд╣рдорд╛рд░реА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдФрд░ рдмреНрд░реЗрдХ рд╣реИ - рдЪрд┐рд▓ рдЖрдЙрдЯ, рдХреБрдЫ рдЪрд╛рдп рдпрд╛ рдХреЙрдлреА рдмрдирд╛рдПрдВред рдЙрд╕рдХреЗ рдмрд╛рдж рдореИрдВ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣реАрдВ рд░рд╣реВрдВрдЧрд╛редрдХреНрдпрд╛ рдЖрдк рд╡рд╛рдкрд╕ рдЖ рдЧрдП рд╣реИрдВ? рддреЛ рдлрд┐рд░ рдЪрд▓рддреЗ рд░рд╣реЗрдВред :)
рд╕рдорд╕реНрдпрд╛ 53рдЕрдм System.Collections.Immutable рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрддрд╛ рд╣реИ ред рдЗрд╕ рдмрд╛рд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ System.Collections.Immutable.ImmutableArray <T> рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдкреНрд░рдпреЛрдЧ рд╣реЛрдВрдЧреЗ ред IStructuralEquatable.Equals рдФрд░ IStructuralComparable.CompareTo рдХреЗ рддрд░реАрдХреЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реБрдЪрд┐ рдХреЗ рд╣реИрдВредрдЖрдЗрдП IStructuralEquatable.Equals рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ ред рдХреЛрдб рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЦреБрдж рдХреЛ рдЧрд▓рдд рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ: bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer) { var self = this; Array otherArray = other as Array; if (otherArray == null) { var theirs = other as IImmutableArray; if (theirs != null) { otherArray = theirs.Array; if (self.array == null && otherArray == null) { return true; } else if (self.array == null) { return false; } } } IStructuralEquatable ours = self.array; return ours.Equals(otherArray, comparer); }
рдЖрдкрдиреЗ рдореИрдиреЗрдЬ рдХрд┐рдпрд╛? рдпрджрд┐ рд╣рд╛рдБ - рдореЗрд░реА рдмрдзрд╛рдИ :)
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3125 'рд╣рдорд╛рд░реА' рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрдм рдЗрд╕реЗ рд╢реВрдиреНрдп рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 1212, 1204. ImmutableArray_1.cs 1212рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЕрдВрддрд┐рдо рдЪрд░рдг рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рд╕реНрдерд┐рдд рд╣рдорд╛рд░реЗ рдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд░рд╛рдмрд░ рд╡рд┐рдзрд┐ рдХреЗ рдХреЙрд▓ рд╕реЗ рднреНрд░рдорд┐рдд рдерд╛ , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ NullReferenceException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рдпрд╣рд╛рдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╕реБрдЭрд╛рддрд╛ рд╣реИ? рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдиреАрдЪреЗ рдПрдХ рд╣реА рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рд╕рд░рд▓реАрдХреГрдд рдХреЛрдб рдЯреБрдХрдбрд╝рд╛ рджреЗ рд░рд╣рд╛ рд╣реВрдВред bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer) { .... if (....) { .... if (....) { .... if (self.array == null && otherArray == null) { .... } else if (self.array == null) { .... } } } IStructuralEquatable ours = self.array; return ours.Equals(otherArray, comparer); }
рдЕрдВрддрд┐рдо рднрд╛рд╡реЛрдВ рдореЗрдВ, рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд┐ рд╣рдорд╛рд░реЗ рдЪрд░ рдХрд╛ рдорд╛рди рд╕реНрд╡рдпрдВ рд╕реЗ рдЖрддрд╛ рд╣реИ ред рдЪреЗрдХ self.array == рдирд▓ рдХрдИ рдмрд╛рд░ рдКрдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ, рд╣рдорд╛рд░рд╛, рд╕реНрд╡рдпрдВ рдХреЗ рд░реВрдк рдореЗрдВ , рдПрдХ рд╣реА рд╣реИред рдЕрд╢рдХреНрдд рдореВрд▓реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХрдо рд╕реЗ рдХрдо рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВред рдХреНрдпрд╛ рдпрд╣ рд░рд╛рдЬреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ? рдЖрдЗрдП рдЬрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдореИрдВ рд╕реЗрдЯ рдХреБрдВрдЬреА рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд┐ рдХреЗ рд╢рд░реАрд░ рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗрддрд╛ рд╣реВрдВред bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer) { var self = this;
рдореБрдЦреНрдп рдмрд┐рдВрджреБ 1. рдЖрддреНрдо.рд░реНрд░реЗ == рдпрд╣.рдЖрдпрд░ ( рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░рдг = рдпрд╣ )ред рдЗрд╕рд▓рд┐рдП, рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдХреА рдЬрд░реВрд░рдд <br> рдХреЛ рд╣рдо рд╣рд╛рд▓рдд рдорд┐рд▓ this.array == рдмрд╛рддрд┐рд▓ редрдореБрдЦреНрдп рдмрд┐рдВрджреБ реи ред рд╣рдо рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ , рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд░ , <br> рд╣рдо рдХреЗрд╡рд▓ рдЬрд░реВрд░рдд рдЕрдиреНрдп рдХреЗ рд╣реЛрдиреЗ рдХреА рдЪрд░ рд╕рд░рдгреА рдкреНрд░рдХрд╛рд░ рдпрд╛ рдПрдХ рд╡реНрдпреБрддреНрдкрдиреНрди рджреЗрдЦреЗрдВ рдПрдХ рдХреА рдХреА рд╣реИ, рдФрд░ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ рдЕрд╢рдХреНрдд рдореВрд▓реНрдп рдХреАред рд░рд╛рд╕реНрддрд╛ рдпрд╣ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рдСрдкрд░реЗрдЯрд░, рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рд╕рдВрджрд░реНрдн рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ otherArray рдФрд░ рд╣рдо рдкрд╣рд▓реА рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗ , рддреЛ рдмрдпрд╛рди редрдореБрдЦреНрдп рдмрд┐рдВрджреБ 3ред рдЗрд╕ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рджреВрд╕рд░реЗ рдкрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдЕрдЧрд░ рдмрдпрд╛рди (рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЙрдирдХреЗ рд╕рд╛рде! = рдЕрд╢рдХреНрдд )ред рдпрд╣ рддреЛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╢рд╛рдЦрд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рдмрд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдмрд┐рдВрджреБ 5 рдХреЗ рддрд╣рдд рд╢рд░реНрдд рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ self.array == рдмрд╛рддрд┐рд▓ рдкреНрд░рдореБрдЦ рдореБрджреНрджрд╛ 4. рдХреА рд╡рдЬрд╣ рд╕реЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд░ рдкреНрд░рдореБрдЦ рдореБрджреНрджрд╛ рдХреЗ рдмрдпрд╛рди 3, рдЗрди рд╢рд░реНрддреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:- рдЕрдиреНрдп рдореВрд▓реНрдп рдХрд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдЕрд╢рдХреНрдд ;
- рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ IImmutableArray рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ред
рдореБрдЦреНрдп рдмрд┐рдВрджреБ 5 ред рдпрджрд┐ рд╣рдо рдЗрд╕ рдорд╛рди рдХреЛ self.array == null рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ , рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдЙрджреНрджреЗрд╢реНрдп рддрдХ рдкрд╣реБрдБрдЪ рдЪреБрдХреЗ рд╣реИрдВ, рдФрд░ NullReferenceException type рдХрд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛редрд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбреЗрдЯрд╛рд╕реЗрдЯ рдорд┐рд▓рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдмрд┐рдВрджреБ рддрдХ рд▓реЗ рдЬрд╛рдПрдВрдЧреЗредрдкрд╣рд▓рд╛: рдпрд╣.рдЕрд░реЗ - рдЕрд╢рдХреНрдд редрджреВрд╕рд░рд╛ - рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рд╕реЗ рдПрдХ:- рдЕрдиреНрдп - рдЕрд╢рдХреНрдд ;
- рдЕрдиреНрдп рдХреЗ рдкрд╛рд╕ рдРрд░реЗ рдкреНрд░рдХрд╛рд░ рд╣реИ рдпрд╛ рдЗрд╕рдореЗрдВ рд╕реЗ рдПрдХ рд╡реНрдпреБрддреНрдкрдиреНрди рд╣реИ;
- рдЕрдиреНрдп рдХреЗ рдкрд╛рд╕ рдПрд░реЗ рдЯрд╛рдЗрдк рдирд╣реАрдВ рд╣реИ рдпрд╛ рдЙрд╕рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рд╣реИ рдФрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ, IImmutableArray рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рд╕рд░рдгреА рдлрд╝реАрд▓реНрдб рд╣реИ, рдЬрд┐рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: internal T[] array;
рдЬреИрд╕рд╛ рдХрд┐ ImmutableArray <T> рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ (рдмрд┐рдирд╛ рддрд░реНрдХ рдХреЗ) рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдРрд░реЗ рдлрд╝реАрд▓реНрдб рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдорд╛рди рд▓реЗрдЧрд╛ , рдЬреЛ рдХрд┐ рдЕрд╢рдХреНрдд рд╣реИред рдФрд░ рдпрд╣реА рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПредрдЖрдЗрдП рдпрд╣ рди рднреВрд▓реЗрдВ рдХрд┐ рд╣рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣реЗ рдереЗ, рдЗрд╕рд▓рд┐рдП рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИредрдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреАрди рддрд░рд╣ рд╕реЗ рдЕрдкрд╡рд╛рдж рдШрдЯрдирд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрд▓ рд╣реИред рд╣рдо рдбрд┐рдмрдЧрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИредрдХреЛрдб рдХрд╛ рдЯреБрдХрдбрд╝рд╛ резред var comparer = EqualityComparer<String>.Default; ImmutableArray<String> immutableArray = new ImmutableArray<string>(); ((IStructuralEquatable)immutableArray).Equals(null, comparer);
рдХреЛрдб рдХрд╛ рдЯреБрдХрдбрд╝рд╛ реиред var comparer = EqualityComparer<String>.Default; ImmutableArray<String> immutableArray = new ImmutableArray<string>(); ((IStructuralEquatable)immutableArray).Equals(new string[] { }, comparer);
рдХреЛрдб рдХрд╛ рдЯреБрдХрдбрд╝рд╛ рейред var comparer = EqualityComparer<String>.Default; ImmutableArray<String> immutableArray = new ImmutableArray<string>(); ((IStructuralEquatable)immutableArray).Equals(typeof(Object), comparer);
рд╕рднреА рддреАрди рдХреЛрдб рдЕрдВрд╢реЛрдВ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рди рд╣реЛрдЧрд╛, рдХреЗрд╡рд▓ рд╡рд┐рднрд┐рдиреНрди рдЗрдирдкреБрдЯ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдбреЗрдЯрд╛ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдкрде рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛редрд╕рдорд╕реНрдпрд╛ 54рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рднреВрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдмрджрдирд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред :) рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░ рд╣рдо рдЗрд╕реЗ рдЗрддрдиреЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВред int IStructuralComparable.CompareTo(object other, IComparer comparer) { var self = this; Array otherArray = other as Array; if (otherArray == null) { var theirs = other as IImmutableArray; if (theirs != null) { otherArray = theirs.Array; if (self.array == null && otherArray == null) { return 0; } else if (self.array == null ^ otherArray == null) { throw new ArgumentException( SR.ArrayInitializedStateNotEqual, nameof(other)); } } } if (otherArray != null) { IStructuralComparable ours = self.array; return ours.CompareTo(otherArray, comparer);
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3125 'рд╣рдорд╛рд░реА' рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрдм рдЗрд╕реЗ рд╢реВрдиреНрдп рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 1265, 1251. ImmutableArray_1.cs 1265рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдорд╛рдорд▓рд╛ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдорд╛рди рд╣реИредрдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд▓рд┐рдЦреЗрдВ: Object other = ....; var comparer = Comparer<String>.Default; ImmutableArray<String> immutableArray = new ImmutableArray<string>(); ((IStructuralComparable)immutableArray).CompareTo(other, comparer);
рд╣рдо рдЙрд╕ рдмрд┐рдВрджреБ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдбреЗрдЯрд╛ рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗ, рдЬрд╣рд╛рдБ NullReferenceException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:рдорд╛рди: рдЕрдиреНрдп - рдирдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ [] {} ;рдкрд░рд┐рдгрд╛рдо:рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдлрд┐рд░ рд╕реЗ рдРрд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдЕрдкрд╡рд╛рдж рд╣реЛрддрд╛ рд╣реИредрдЕрдВрдХ 55рдореЗрдВ рд╕реЗ System.Net.HttpListener рдмрд╣реБрдд рджреЛрдиреЛрдВ рдХрдИ рд╕рдВрджрд┐рдЧреНрдз рдлреИрд╕рд▓реЗ рдХреЗ рдкрд░ рдареЛрдХрд░ рдЦрд╛рдИ, рдФрд░ рд╡рд┐рдЬреНрдЮрд╛рдкрдирджрд╛рддрд╛рдУрдВ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореИрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рд╕рдорд╛рди рд╕реНрдерд╛рдиред рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдореИрдВ рдпрд╣рд╛рдВ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдЪреВрдВрдХрд┐ рдкреИрдЯрд░реНрди рд╕рдорд╛рди рд╣реИ, рд╣рдо рдПрдХ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВрдЧреЗред рдореИрдВ рдмрд╛рдХреА рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреВрдБрдЧрд╛ред public override IAsyncResult BeginRead(byte[] buffer, ....) { if (NetEventSource.IsEnabled) { NetEventSource.Enter(this); NetEventSource.Info(this, "buffer.Length:" + buffer.Length + " size:" + size + " offset:" + offset); } if (buffer == null) { throw new ArgumentNullException(nameof(buffer)); } .... }
PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3095 'рдмрдлрд░' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЗрд╕реЗ рд╢реВрдиреНрдп рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рдБрдЪ рд▓рд╛рдЗрдиреЗрдВ: 51, 53. HttpRequestStream.cs 51 рд╢рд░реНрдд рдмрдлрд╝рд░ рдХреЗ рддрд╣рдд ArgumentNullException рдкреНрд░рдХрд╛рд░ рдХреЗрдЕрдкрд╡рд╛рдж рдХреА рдкреАрдврд╝реА == рдЕрд╢рдХреНрддрддрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдЕрд╢рдХреНрдд рдЗрд╕ рдЪрд░ рдХреЗ рд▓рд┐рдП рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рдорд╛рди рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ NetEventSource.IsEnabled рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдорд╛рди рд╕рддреНрдп рдФрд░ рдмрдлрд╝рд░ - null рд╣реИ , рдЬрдм рдмрдлрд░ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдЬрд╝рд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐, NullReferenceException type рдХрд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рднреА рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗрдВрдЧреЗрдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрдлрд░ == рдЕрд╢рдХреНрдд рдЬрд╛рдБрдЪредрдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рд░реА рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:- V3095 рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'рдмрдлрд░' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 49, 51. HttpResponseStream.cs 49
- V3095 рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'рдмрдлрд░' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 74, 75. HttpResponseStream.cs 74
рд╕рдорд╕реНрдпрд╛ 56рдПрдХ рд╕рдорд╛рди рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ System.Transactions.Local рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдерд╛ред internal override void EnterState(InternalTransaction tx) { if (tx._outcomeSource._isoLevel == IsolationLevel.Snapshot) { throw TransactionException.CreateInvalidOperationException( TraceSourceType.TraceSourceLtm, SR.CannotPromoteSnapshot, null, tx == null ? Guid.Empty : tx.DistributedTxId); } .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3095 рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'tx' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 3282, 3285. TransactionState.cs 3282рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╢рд░реНрдд рдХреЗ рддрд╣рдд, рдПрдХ рд▓реЗрдЦрдХ InvalidOperationException рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ ред рдЬрдм рдЕрдкрд╡рд╛рдж рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдХрдВрдкрдиреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдХреЙрд▓рд┐рдВрдЧ, рд▓реЗрдЦрдХреЛрдВ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ tx рдкреИрд░рд╛рдореАрдЯрд░, рдЖрдИрдЯреА рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдЕрд╢рдХреНрдд рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╕реЗ рдмрдЪреЗрдВ рдПрдХ NullReferenceException рдкреНрд░рдХрд╛рд░ рдЬрдм рдореВрд▓реНрдпрд╛рдВрдХрди рдХреА tx.DistributedTxId рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ред рдпрд╣ рд╡рд┐рдбрдВрдмрдирд╛ рд╣реИ рдХрд┐ рдЪреЗрдХ рд╕реЗ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рдП , рддреЛ рдЙрджрд╛рд╣рд░рдг рдлрд╝реАрд▓реНрдб tx рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ -tx._outcomeSource._isoLevel ред System.Runtime.Caching рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ57рдХреЛрдб рдЬрд╛рд░реА рдХрд░реЗрдВ ред internal void SetLimit(int cacheMemoryLimitMegabytes) { long cacheMemoryLimit = cacheMemoryLimitMegabytes; cacheMemoryLimit = cacheMemoryLimit << MEGABYTE_SHIFT; _memoryLimit = 0;
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3022 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'cacheMemoryLimit! = 0 && _memLLimit! = 0' рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реИред CacheMemoryMonitor.cs 250рдпрджрд┐ рдЖрдк рдХреЛрдб рдХреЛ рдХрд░реАрдм рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдПрдХ рднрд╛рд╡ - cacheMemoryLimit! = 0 && _memoryLimit! = 0 рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрдЧрд╛ ред рдЪреВрдБрдХрд┐ _moryLimit рдореЗрдВ 0 рдорд╛рди рд╣реИ ( рдпрджрд┐ рдХрдерди рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), && рдСрдкрд░реЗрдЯрд░ рдХрд╛ рд╕рд╣реА рд╕рдВрдЪрд╛рд▓рдХ рдЧрд▓рдд рд╣реИ ред рдЗрд╕рд▓рд┐рдП, рдкреВрд░реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЧрд▓рдд рд╣реИ редрд╕рдорд╕реНрдпрд╛ 58рдореИрдВ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП System.Diagnostics.TraceSource рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдПрдХ рд╕рдВрджрд┐рдЧреНрдз рдХреЛрдб рдЯреБрдХрдбрд╝рд╛ рдЙрджреНрдзреГрдд рдХрд░рддрд╛ рд╣реВрдВ ред public override object Pop() { StackNode n = _stack.Value; if (n == null) { base.Pop(); } _stack.Value = n.Prev; return n.Value; }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3125 'n' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрдм рдЗрд╕реЗ null рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 115, 111. рд╕рд╣рд╕рдВрдмрдВрдзрдкреНрд░рдмрдВрдзрдХ .cs 115рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдорд╛рдорд▓рд╛ рд╣реИред рдЪреЗрдХ n == рдЕрд╢рдХреНрдд рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг , рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ, рдпрд╣ рдЕрд╢рдХреНрдд рдЗрд╕ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдкреЗрдХреНрд╖рд┐рдд рдореВрд▓реНрдп рд╣реИред рдпрджрд┐ рд╣рд╛рдВ, рддреЛ NullReferenceException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдкреНрд░реЙрдкрд░реНрдЯреА рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдкрд░ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛ - n.Prev ред рдпрджрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ n рдХрднреА рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ , рддреЛ рдЖрдзрд╛рд░ .Pop () рдХреЛ рдХрднреА рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛редрд╕рдорд╕реНрдпрд╛ 59 System.Drawing.Primaticsрд╕реЗ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдХреЛрдб рдЯреБрдХрдбрд╝рд╛ рд╣реИрдкрд░рд┐рдпреЛрдЬрдирд╛ред рдлрд┐рд░ рд╕реЗ, рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдпрдВ рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ: public static string ToHtml(Color c) { string colorString = string.Empty; if (c.IsEmpty) return colorString; if (ColorUtil.IsSystemColor(c)) { switch (c.ToKnownColor()) { case KnownColor.ActiveBorder: colorString = "activeborder"; break; case KnownColor.GradientActiveCaption: case KnownColor.ActiveCaption: colorString = "activecaption"; break; case KnownColor.AppWorkspace: colorString = "appworkspace"; break; case KnownColor.Desktop: colorString = "background"; break; case KnownColor.Control: colorString = "buttonface"; break; case KnownColor.ControlLight: colorString = "buttonface"; break; case KnownColor.ControlDark: colorString = "buttonshadow"; break; case KnownColor.ControlText: colorString = "buttontext"; break; case KnownColor.ActiveCaptionText: colorString = "captiontext"; break; case KnownColor.GrayText: colorString = "graytext"; break; case KnownColor.HotTrack: case KnownColor.Highlight: colorString = "highlight"; break; case KnownColor.MenuHighlight: case KnownColor.HighlightText: colorString = "highlighttext"; break; case KnownColor.InactiveBorder: colorString = "inactiveborder"; break; case KnownColor.GradientInactiveCaption: case KnownColor.InactiveCaption: colorString = "inactivecaption"; break; case KnownColor.InactiveCaptionText: colorString = "inactivecaptiontext"; break; case KnownColor.Info: colorString = "infobackground"; break; case KnownColor.InfoText: colorString = "infotext"; break; case KnownColor.MenuBar: case KnownColor.Menu: colorString = "menu"; break; case KnownColor.MenuText: colorString = "menutext"; break; case KnownColor.ScrollBar: colorString = "scrollbar"; break; case KnownColor.ControlDarkDark: colorString = "threeddarkshadow"; break; case KnownColor.ControlLightLight: colorString = "buttonhighlight"; break; case KnownColor.Window: colorString = "window"; break; case KnownColor.WindowFrame: colorString = "windowframe"; break; case KnownColor.WindowText: colorString = "windowtext"; break; } } else if (c.IsNamedColor) { if (c == Color.LightGray) {
рдареАрдХ рд╣реИ, рдареАрдХ рд╣реИ, рдмрд╕ рдордЬрд╛рдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВ ... рдпрд╛ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЕрднреА рднреА рдХреБрдЫ рдорд┐рд▓рд╛ рд╣реИ? рд╡реИрд╕реЗ рднреА, рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдХрдо рдХрд░реЗрдВредрдпрд╣рд╛рдБ рд▓рдШреБ рдХреЛрдб рд╕рдВрд╕реНрдХрд░рдг рд╣реИ: switch (c.ToKnownColor()) { .... case KnownColor.Control: colorString = "buttonface"; break; case KnownColor.ControlLight: colorString = "buttonface"; break; .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3139 рджреЛ рдпрд╛ рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рдХреЗрд╕-рд╢рд╛рдЦрд╛рдПрдБ рдПрдХ рд╣реА рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ рд╣реИрдВред ColorTranslator.cs 302рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИред рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЬрдм рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдиреЗ рдХрдИ рдПрдиреБрдорд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдореВрд▓реНрдп рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рддреЛ рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ-рджреВрд╕рд░реЗ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реБрдП рдХрдИ рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ ред рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдЧрд▓рддреА рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИредрдереЛрдбрд╝рд╛ рдФрд░ рдЧрд╣рд░рд╛ рдЦреЛрджрддреЗ рд╣реИрдВред рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдП рдЧрдП ToHtml рд╡рд┐рдзрд┐ рд╕реЗ "рдмрдЯрдирдлреЗрд╕" рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП , рдЖрдк рдЗрд╕рдореЗрдВ рд╕реЗ рдПрдХ рдорд╛рди рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЕрдкреЗрдХреНрд╖рд┐рдд):- SystemColors.Control ;
- SystemColors.ControlLight ред
рдпрджрд┐ рд╣рдо рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд░рдВрдЧ рдХреЗ рд▓рд┐рдП ARGB рдорд╛рди рдХреА рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦреЗрдВрдЧреЗ:- SystemColors.Control - (255, 240, 240, 240) ;
- SystemColors.ControlLight - (255, 227, 227, 227) ред
рдпрджрд┐ рд╣рдо рдкреНрд░рддрд┐рд▓реЛрдо рд░реВрдкрд╛рдВрддрд░рдг рд╡рд┐рдзрд┐ FromHtml рдХреЛ рдкреНрд░рд╛рдкреНрдд рдорд╛рди ( "рдмрдЯрдирдлреЗрд╕" ) рдкрд░ рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд░рдВрдЧ рдирд┐рдпрдВрддреНрд░рдг (255, 240, 240, 240) рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ ред рдХреНрдпрд╛ рд╣рдо FromHtml рд╕реЗ ControlLight рд░рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ? рд╣рд╛рдВред рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ рд░рдВрдЧреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рд╣реИ, рдЬреЛ рд░рдВрдЧреЛрдВ рдХреА рд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рд╣реИ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ)ред рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЖрд░рдореНрднрдХ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░реЗрдЦрд╛ рд╣реЛрддреА рд╣реИ: s_htmlSysColorTable["threedhighlight"] = ColorUtil.FromKnownColor(KnownColor.ControlLight);
рддрджрдиреБрд╕рд╛рд░, FromHtml рд░рд┐рдЯрд░реНрди ControlLight (255, 227, 227, 227) рдХреЗ рд▓рд┐рдП рд░рдВрдЧ ┬лThreeDHighlight┬╗ рдореВрд▓реНрдп рдХреАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ KnownColor.ControlLight рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ редрд╕рдорд╕реНрдпрд╛ 60рд╣рдо System.Text.RegularExpressions рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВрдЧреЗ ред internal virtual string TextposDescription() { var sb = new StringBuilder(); int remaining; sb.Append(runtextpos); if (sb.Length < 8) sb.Append(' ', 8 - sb.Length); if (runtextpos > runtextbeg) sb.Append(RegexCharClass.CharDescription(runtext[runtextpos - 1])); else sb.Append('^'); sb.Append('>'); remaining = runtextend - runtextpos; for (int i = runtextpos; i < runtextend; i++) { sb.Append(RegexCharClass.CharDescription(runtext[i])); } if (sb.Length >= 64) { sb.Length = 61; sb.Append("..."); } else { sb.Append('$'); } return sb.ToString(); }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3137 'рд╢реЗрд╖' рдЪрд░ рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрдд рддрдХ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред RegexRunner.cs 612рд╕реНрдерд╛рдиреАрдп рд╢реЗрд╖ рдЪрд░ рдореЗрдВ рдПрдХ рдорд╛рди рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдм рд╡рд┐рдзрд┐ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢рд╛рдпрдж, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреБрдЫ рдХреЛрдб рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЪрд░ рд╣реА рднреВрд▓ рдЧрдпрд╛ рдерд╛ред рдпрд╛ рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддреНрд░реБрдЯрд┐ рд╣реИ рдФрд░ рдЗрд╕ рдЪрд░ рдХрд╛ рдХрд┐рд╕реА рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИредрдЕрдВрдХ 61 public void AddRange(char first, char last) { _rangelist.Add(new SingleRange(first, last)); if (_canonical && _rangelist.Count > 0 && first <= _rangelist[_rangelist.Count - 1].Last) { _canonical = false; } }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3063 рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣рдореЗрд╢рд╛ рд╕рд╣реА рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдЙрд╕рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: _rangelist.Count> 0. RegexCharClass.cs 523рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдареАрдХ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛, рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ _rangelist.Count> 0 рд╣рдореЗрд╢рд╛ рд╕рд╣реА рд░рд╣реЗрдЧрд╛ ред рдпрджрд┐ рдпрд╣ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдпрд╣ рд╕реВрдЪреА (рдЬреЛ _rangelist рдмрд┐рдВрджреБ рдкрд░ рд╣реИ), рдЦрд╛рд▓реА рдереА, рддреЛ рддрддреНрд╡ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж _rangelist.Add (....) рдпрд╣ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛редрдЕрдВрдХ 62рдХреА рдЪреЗрддрд╛рд╡рдиреА рдкрд░ рдЖрдЗрдП рдирдЬрд╝рд░ рдХреЗ рд▓рд┐рдП V3128 рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ 'рдореЗрдВ рдиреИрджрд╛рдирд┐рдХ рд╢рд╛рд╕рди System.Drawing.Common рдФрд░ System.Transactions.Local ред private class ArrayEnumerator : IEnumerator { private object[] _array; private object _item; private int _index; private int _startIndex; private int _endIndex; public ArrayEnumerator(object[] array, int startIndex, int count) { _array = array; _startIndex = startIndex; _endIndex = _index + count; _index = _startIndex; } .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3128 '_index' рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдпрд╣ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред PrinterSettings.Windows.cs 1679 _endIndex рдлрд╝реАрд▓реНрдб рдХреЛрдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╕рдордп , рдПрдХ рдФрд░ _index рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рдордп рдореЗрдВ рдПрдХ рдорд╛рдирдХ рдорд╛рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ (int) , (рдЬреЛ 0 рд╣реИ )ред рдХреА _index рдлрд╝реАрд▓реНрдб рдХреЗ рдиреАрдЪреЗ рд╕реЗ рдЖрд░рдВрдн рдирд╣реАрдВ рд╣реИред рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдЧрд░ рдпрд╣ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ - _index рдЪрд░ рдХреЛ рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛редрдЕрдВрдХ 63 internal class TransactionTable { .... private int _timerInterval; .... internal TransactionTable() {
PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V3128 '_timerInterval' рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдЖрд░рдВрднреАрдХреГрдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред TransactionTable.cs 151рдпрд╣ рдорд╛рдорд▓рд╛ рдКрдкрд░ рд╡рд╛рд▓реЗ рдХреЗ рд╕рдорд╛рди рд╣реИред рдкрд╣рд▓реЗ _timerInterval рдлрд╝реАрд▓реНрдб рдХреЗ рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрдмрдХрд┐ рдпрд╣ рдЕрднреА рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ (int) рд╣реИ ) _timer рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ред рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА _timerInterval рдлрд╝реАрд▓реНрдб рдХреЛ рд╕реНрд╡рдпрдВ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛редрд╕рдорд╕реНрдпрд╛ 64рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрдирд┐рдпрдо рджреНрд╡рд╛рд░рд╛ рдЕрдЧрд▓реА рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреА рдЧрдИ рдереА, рдЬреЛ рдЕрднреА рднреА рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╣реИред рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдпрд╛ рдЕрдВрддрд┐рдо рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕рдХреА рдорджрдж рд╕реЗ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдЕрдВрд╢реЛрдВ рдХреЛ рдвреВрдВрдв рд▓рд┐рдпрд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ рдпреЗ рдЯреБрдХрдбрд╝реЗ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХреА рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ , рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рдХреЛрдб рдЯреБрдХрдбрд╝рд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред private bool ProcessNotifyConnection(....) { .... WeakReference reference = (WeakReference)( LdapConnection.s_handleTable[referralFromConnection]); if ( reference != null && reference.IsAlive && null != ((LdapConnection)reference.Target)._ldapHandle) { .... } .... }
PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА (рд╕реНрдЯрдм): VXXXX TODO_MESSAGE LdapSessionOptions.cs 974рдЪрд╛рд▓ рд╣реИ рдХрд┐ рд╕рдВрджрд░реНрдн рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рджред рд╢реЗрд╖ , рдХрдЪрд░рд╛ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ, рдЬреЛ WeakReference рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХрдЪрд░рд╛ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд▓рдХреНрд╖реНрдп рд╢реВрдиреНрдп рдорд╛рди рд▓реМрдЯрд╛рдПрдЧрд╛ ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЖрд╡реГрддреНрддрд┐ рдлрд╝реАрд▓реНрдб _ldapHandle рддрдХ рдкрд╣реБрдБрдЪрддреЗ рд╕рдордп , NullReferenceException рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛ред Microsoft рд╕реНрд╡рдпрдВ рдЗрд╕ рдЬрд╛рд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рддрд╛ рд╣реИ IsAlive рдХреЗ рд╕рд╛рдеред Docs.microsoft.com рдХрд╛ рдПрдХ рдЙрджреНрдзрд░рдг - " WeakReference.IsAlive Property ":Because an object could potentially be reclaimed for garbage collection immediately after the IsAlive property returns true, using this property is not recommended unless you are testing only for a false return value.Summary on Analysis
рдХреНрдпрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рджреМрд░рд╛рди рдпреЗ рд╕рднреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╕реНрдерд╛рди рд╣реИрдВ? рдмреЗрд╢рдХ, рдирд╣реАрдВ! рдЬрдм рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦ рд░рд╣рд╛ рдерд╛, рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝рддреА рдЧрдИ рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛрддрд╛ рдЧрдпрд╛ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдереЗ, рдореИрдВ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░ рд░рд╣рд╛ рдерд╛, рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬреЛ рдореБрдЭреЗ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧ рд░рд╣реЗ рдереЗред рдЬрдм рдореИрдВ рдЕрдВрддрд┐рдо рд╡рд╛рд▓реЗ (рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рд▓реЙрдЧ) рдХреЗ рдкрд╛рд╕ рдЧрдпрд╛, рддреЛ рдореИрдВ рдХреЗрд╡рд▓ рддрдм рддрдХ рджреЗрдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛, рдЬрдм рддрдХ рдХрд┐ рдХрд┐рд╕реА рдЕрд╕рд╛рдорд╛рдиреНрдп рдЪреАрдЬ рдкрд░ рджреГрд╖реНрдЯрд┐ рди рдкрдбрд╝рдиреЗ рддрдХ рдЪреЗрддрд╛рд╡рдиреАред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдЪрд╛рд░реЛрдВ рдУрд░ рдЦреБрджрд╛рдИ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЖрдк рдмрд╣реБрдд рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕реНрдерд╛рди рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВредрдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд▓рдЧрднрдЧ рд╕рднреА V3022 рдФрд░ V3063 рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ ред рдЗрд╕рд▓рд┐рдП рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдХреЛрдб рдЖрддрд╛ рд╣реИ: String str = null; if (str == null) ....
рдореИрдВ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рдЕрдиреНрдп рджрд┐рд▓рдЪрд╕реНрдк рдЬрдЧрд╣реЗрдВ рдереАрдВ рдЬрд┐рдирдХрд╛ рдореИрдВ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЗрд╕ рдФрд░ рдЗрд╕реА рддрд░рд╣ рд▓реЙрдХрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд▓реЙрдХ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд▓реЙрдХрд┐рдВрдЧ рдкрд░ рдЪреЗрддрд╛рд╡рдиреА рджреА рдЧрдИ рдереА - V3090 ; рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдИрд╡реЗрдВрдЯ рдХреЙрд▓ - V3083 ; рд╡рд╕реНрддреБрдУрдВ, рдЬреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди IDisposable , рд▓реЗрдХрд┐рди рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдирд┐рдкрдЯрд╛рди / рдмрдВрдж рдмреБрд▓рд╛рдпрд╛ рдирд╣реАрдВ рд╣реИ - V3072 рдФрд░ рд╡рд┐рдЬреНрдЮрд╛рдкрдирджрд╛рддрд╛рдУрдВ рдХрд╛ рдЪрдпрди рдЗрд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рджрд╛рди рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫред рдореИрдВрдиреЗ рд╕рдорд╕реНрдпрд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛, рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рд▓рд┐рдЦрд╛ред рдХрдо рд╕реЗ рдХрдо, рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдЧрд▓рддреА рд╕реЗ рдХреБрдЫ рд▓реЗ рд╕рдХрддрд╛ рдерд╛ред рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдЬреЛ рдореБрдЭреЗ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧреЗ, рдЙрдирдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ред рд▓реЗрдХрд┐рди рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдкрд░реАрдХреНрд╖рдг рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗредрдЖрдо рддреМрд░ рдкрд░, рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдХрдИ рдЪреАрдЬреЗрдВ рд╣реИрдВ - рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рднреА рдкрд╛рдпрд╛ рдореБрджреНрджреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рдерд╛ редрдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореБрдЭреЗ рдЕрд╕рдорд╛рди рд▓рдЧ рд░рд╣реА рдереАред рдХреБрдЫ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рдл рдереАрдВ, рдЕрдиреНрдп рдореЗрдВ рд╕рдВрджрд┐рдЧреНрдз рд╕реНрдерд╛рди рдереЗред рд╢рд╛рдпрдж рд╣рдо рд╕реНрд╡рдЪреНрдЫ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдпрд╣ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИредрд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд┐ рдпрд╣ рдХреЛрдб рдХрд╛рдлреА рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреА рд░рд╛рд╢рд┐ рдХрд╛рдлреА рдереАред рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдХреБрдЫ рдЕрдВрдзреЗрд░реЗ рдХреЛрдиреЗ рдереЗредрд╡реИрд╕реЗ, рдЗрд╕ рдЖрдХрд╛рд░ рдХреА рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рднреА рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рдкрд░реАрдХреНрд╖рд╛ рд╣реИред рдореИрдВ рдХрдИ рдЭреВрдареА / рдЕрдЬреАрдм рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рдЕрдзреНрдпрдпрди рдФрд░ рд╕рд╣реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрдирд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореИрдВ рдЙрди рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛, рдЬрд╣рд╛рдВ рд╣рдореЗрдВ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рд╣реА рдХрд╛рдо рдХрд░рдирд╛ рд╣реИредрдирд┐рд╖реНрдХрд░реНрд╖
рдЕрдЧрд░ рдЖрдк рдкреВрд░рд╛ рд▓реЗрдЦ рдкрдврд╝рдХрд░ рдЗрд╕ рдЬрдЧрд╣ рдкрд░ рдЖ рдЧрдП рд╣реИрдВ - рддреЛ рдореБрдЭреЗ рд╣рд╛рде рдорд┐рд▓рд╛рдиреЗ рджреАрдЬрд┐рдП! рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЖрдкрдХреЛ рджрд┐рд▓рдЪрд╕реНрдк рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рдФрд░ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд╛рдн рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рдерд╛ред рдпрджрд┐ рдЖрдкрдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдХреБрдЫ рдирдпрд╛ рд╕реАрдЦрд╛ рд╣реИ, рддреЛ рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рдмреЗрд╣рддрд░ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреА - рдореИрдВ рджреЛрдЧреБрдирд╛ рдкреНрд░рд╕рдиреНрди рд╣реЛ рдЬрд╛рдКрдВрдЧрд╛редрд╡реИрд╕реЗ рднреА, рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЗ рдХреБрдЫ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреА, рдЗрд╕рд▓рд┐рдП рд╕реБрдЭрд╛рд╡ рджреЗрдВ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдХреНрдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╕реНрдерд╛рди рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ рдпрд╛ рдЖрдк рджрд┐рд▓рдЪрд╕реНрдк рдкрд╛рдпрд╛ рдЕрдВрд╢ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - support@viva64.com рдкрд░ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдВрдХреЛрдЪ рди рдХрд░реЗрдВ ред :)
рд╕рд╛рджрд░ рдкреНрд░рдгрд╛рдо!.NET рдХреЛрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП PS
рдЖрдк рдЬреЛ рдХрд░рддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж! рдЕрдЪреНрдЫрд╛ рдХрд╛рдо! рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЛ рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдпрд╛рдж рд░рдЦреЗрдВ, рдХрд┐ рдореИрдВрдиреЗ рд╕рднреА рд╕рдВрджрд┐рдЧреНрдз рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рд╣реИ рдФрд░ рдЖрдк рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдмреЗрд╣рддрд░ рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рддрд░рд╣, рдЖрдк рд╡рд┐рд╡рд░рдгреЛрдВ рдореЗрдВ рд╕рднреА рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд╕рдХреЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд░рд▓ рдкрд╛рда рд▓реЙрдЧ / рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ ( рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ )ред