{"id":293304,"date":"2019-08-13T15:00:15","date_gmt":"2019-08-13T15:00:15","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=293304"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=293304","title":{"rendered":"\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a .NET Core \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u043c PVS-Studio"},"content":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/4c0\/729\/039\/4c07290399528de52d8d420c47690911.png\" alt=\"Picture 19\"><\/div>\n<p>  \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 .NET Core \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 C# \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 GitHub. \u041d\u0435\u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0435\u0433\u043e \u0448\u0438\u0440\u043e\u043a\u043e\u0439 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0441\u0442\u0438. \u0422\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0442\u0451\u043c\u043d\u044b\u0435 \u0443\u0433\u043e\u043b\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u044d\u0442\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0447\u0442\u043e \u043c\u044b \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 PVS-Studio. \u041a\u0430\u043a \u0434\u0443\u043c\u0430\u0435\u0442\u0435, \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043b\u0438 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435?<br \/>  <a name=\"habracut\"><\/a><br \/>  \u041a \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0448\u0451\u043b \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u0443\u0442\u043e\u0440\u0430 \u043b\u0435\u0442. \u0412 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u0432 \u043c\u043e\u0435\u0439 \u0433\u043e\u043b\u043e\u0432\u0435 \u043f\u043e\u0441\u0435\u043b\u0438\u043b\u0430\u0441\u044c \u043c\u044b\u0441\u043b\u044c, \u0447\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 .NET Core \u2014 \u043b\u0430\u043a\u043e\u043c\u044b\u0439 \u043a\u0443\u0441\u043e\u0447\u0435\u043a, \u0438 \u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439. \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u043f\u0440\u043e\u0435\u043a\u0442, \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043d\u0430\u0445\u043e\u0434\u0438\u043b \u0432\u0441\u0451 \u043d\u043e\u0432\u044b\u0435 \u0438 \u043d\u043e\u0432\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430, \u043d\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u0431\u0435\u0433\u043b\u043e\u0433\u043e \u043f\u0440\u043e\u043b\u0438\u0441\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439 \u0434\u0435\u043b\u043e \u043d\u0435 \u0448\u043b\u043e. \u0418 \u0432\u043e\u0442 \u043e\u043d\u043e \u2014 \u0441\u0432\u0435\u0440\u0448\u0438\u043b\u043e\u0441\u044c! \u041f\u0440\u043e\u0435\u043a\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d, \u0441\u0442\u0430\u0442\u044c\u044f \u2014 \u043f\u0435\u0440\u0435\u0434 \u0432\u0430\u043c\u0438.<\/p>\n<h2>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437<\/h2>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0436\u0430\u0436\u0434\u0435\u0442\u0435 \u0441 \u0433\u043e\u043b\u043e\u0432\u043e\u0439 \u043e\u043a\u0443\u043d\u0443\u0442\u044c\u0441\u044f \u0432 \u0440\u0430\u0437\u0431\u043e\u0440 \u043a\u043e\u0434\u0430 \u2014 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437\u0434\u0435\u043b \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u043d\u043e \u043c\u043d\u0435 \u043a\u0440\u0430\u0439\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u0435\u0433\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b\u0438 \u2014 \u0437\u0434\u0435\u0441\u044c \u044f \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b \u0430\u043d\u0430\u043b\u0438\u0437 \u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043b \u043e\u0448\u0438\u0431\u043a\u0438.<\/p>\n<h3>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442<\/h3>\n<p>  \u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0438 \u043d\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 CoreFX (\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 .NET Core), \u043d\u043e, \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0432\u044b \u043d\u0435 \u0441\u043b\u044b\u0448\u0430\u043b\u0438, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0438\u0436\u0435. \u042f \u043d\u0435 \u0441\u0442\u0430\u043b \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0444\u0440\u0430\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0432\u0437\u044f\u043b <a href=\"https:\/\/github.com\/dotnet\/corefx\">\u0441\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 GitHub<\/a>, \u0433\u0434\u0435 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438.<\/p>\n<p>  \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435: <i>This repo contains the library implementation (called \u00abCoreFX\u00bb) for .NET Core. It includes System.Collections, System.IO, System.Xml, and many other components. The corresponding .NET Core Runtime repo (called \u00abCoreCLR\u00bb) contains the runtime implementation for .NET Core. It includes RyuJIT, the .NET GC, and many other components. Runtime-specific library code (System.Private.CoreLib) lives in the CoreCLR repo. It needs to be built and versioned in tandem with the runtime. The rest of CoreFX is agnostic of runtime-implementation and can be run on any compatible .NET runtime (e.g. CoreRT)<\/i>.<\/p>\n<h3>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438 \u0441\u043f\u043e\u0441\u043e\u0431 \u0430\u043d\u0430\u043b\u0438\u0437\u0430<\/h3>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/www.viva64.com\/ru\/pvs-studio-download\/\">\u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 PVS-Studio<\/a>. \u0412\u043e\u043e\u0431\u0449\u0435 PVS-Studio \u0443\u043c\u0435\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e C# \u043a\u043e\u0434, \u043d\u043e \u0438 C, C++, Java. \u0410\u043d\u0430\u043b\u0438\u0437 C# \u043a\u043e\u0434\u0430 \u043f\u043e\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434 Windows, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u043a\u043e\u0434 \u043d\u0430 C, C++, Java \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 Windows, Linux, macOS.<\/p>\n<p>  \u041e\u0431\u044b\u0447\u043d\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 C# \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043f\u043b\u0430\u0433\u0438\u043d PVS-Studio \u0434\u043b\u044f Visual Studio (\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0435\u0440\u0441\u0438\u0438 2010-2019), \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0430\u043d\u0430\u043b\u0438\u0437\u0430: \u043e\u0442\u043a\u0440\u044b\u0442\u044c solution, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437, \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439. \u0421 CoreFX, \u043e\u0434\u043d\u0430\u043a\u043e, \u0432\u044b\u0448\u043b\u043e \u0447\u0443\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u0435\u0435.<\/p>\n<p>  \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0435\u0442 \u0435\u0434\u0438\u043d\u043e\u0433\u043e .sln \u0444\u0430\u0439\u043b\u0430, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0435\u0433\u043e \u0432 Visual Studio \u0438 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u043f\u043e\u043b\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u043b\u0430\u0433\u0438\u043d PVS-Studio, \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u043e\u043d\u043e \u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u2014 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e, \u043a\u0430\u043a Visual Studio \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0430\u0441\u044c \u0431\u044b \u0441 solution \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430.<\/p>\n<p>  \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u0430\u043d\u0430\u043b\u0438\u0437\u043e\u043c \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u0441\u043e\u0441\u0442\u0430\u0432 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 PVS-Studio \u0432\u0445\u043e\u0434\u0438\u0442 command line \u0432\u0435\u0440\u0441\u0438\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0434\u043b\u044f MSBuild \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 (\u0438, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, .sln). \u0412\u0441\u0451, \u0447\u0442\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043e\u0442 \u043c\u0435\u043d\u044f \u2014 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b \u00abPVS-Studio_Cmd.exe\u00bb \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 .sln \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 CoreFX \u0438 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e (\u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u043b\u0430\u0433\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430).<\/p>\n<p>  \u0412\u0443\u0430\u043b\u044f! \u2014 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0438\u043c\u0435\u044e \u043d\u0430\u0431\u043e\u0440 \u043b\u043e\u0433\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e. \u041f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043b\u043e\u0433\u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0443\u0442\u0438\u043b\u0438\u0442\u044b PlogConverter, \u0438\u0434\u0443\u0449\u0435\u0439 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430. \u041d\u043e \u043c\u043d\u0435 \u0431\u044b\u043b\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043b\u043e\u0433\u0430\u043c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0438\u0445 \u044f \u043d\u0435 \u0441\u0442\u0430\u043b.<\/p>\n<p>  \u041f\u0440\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u044f \u0441\u0441\u044b\u043b\u0430\u044e\u0441\u044c \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0441 docs.microsoft.com \u0438 \u043d\u0430 NuGet \u043f\u0430\u043a\u0435\u0442\u044b, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441 nuget.org. \u0414\u043e\u043f\u0443\u0441\u043a\u0430\u044e, \u0447\u0442\u043e \u043a\u043e\u0434, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \/ \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0439\u0441\u044f \u0432 \u043f\u0430\u043a\u0435\u0442\u0430\u0445, \u043c\u043e\u0436\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0431\u0443\u0434\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u0435\u0441\u043b\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043d\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u043f\u0440\u0438 \u0440\u044f\u0434\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u0432 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 \u043e\u043d\u0438 \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f \u2014 \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u0435\u0441\u044c, \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u043c\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u044e\u0440\u043f\u0440\u0438\u0437. \u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u043f\u0430\u043a\u0435\u0442\u0430\u0445 \u0438\u0437 NuGet \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 \u043d\u0435 \u043d\u043e\u0432\u0430\u044f, \u0438, \u0447\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e \u0435\u0451 \u043c\u043e\u0436\u043d\u043e &#8216;\u043f\u043e\u0449\u0443\u043f\u0430\u0442\u044c&#8217;, \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u044f \u043f\u0440\u043e\u0435\u043a\u0442 \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432.<\/p>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0430\u0441\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430, \u044f \u043d\u0430\u0445\u043e\u0436\u0443 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u043c \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043d\u0430 docs.microsoft.com \u0438 \u043a \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0430 \u043f\u0430\u043a\u0435\u0442\u0430\u0445 \u0438\u0437 nuget.org.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0437\u0430\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043c\u044b\u043c \u0441\u0441\u044b\u043b\u043a\u0430\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f (\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438) \u0432 \u043f\u0430\u043a\u0435\u0442\u0430\u0445 (\u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445) \u043c\u043e\u0433\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c\u0441\u044f \u0432 \u0445\u043e\u0434\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<h3>\u0414\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b<\/h3>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u044d\u0442\u043e \u0432\u0435\u0434\u044c \u043d\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0432 \u0441\u0432\u043e\u0451\u043c \u0440\u043e\u0434\u0435 \u0441\u0442\u0430\u0442\u044c\u044f \u2014 \u043c\u044b \u043f\u0438\u0448\u0435\u043c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u0442\u043e\u0440\u044b\u0445 <a href=\"https:\/\/www.viva64.com\/ru\/inspections\/\">\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0437\u0434\u0435\u0441\u044c<\/a>. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0443 \u043d\u0430\u0441 \u0441\u043e\u0431\u0440\u0430\u043d\u044b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u0442\u044c\u0438 \u043e\u0431 \u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u043d\u043e \u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e C, C++, C#, Java, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0437\u0430\u043c\u0435\u0442\u043a\u0438. \u041d\u0430\u0439\u0442\u0438 \u0432\u0441\u0451 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432 <a href=\"https:\/\/www.viva64.com\/ru\/b\">\u0431\u043b\u043e\u0433\u0435<\/a>.<\/p>\n<p>  \u041c\u043e\u0439 \u043a\u043e\u043b\u043b\u0435\u0433\u0430 \u0440\u0430\u043d\u0435\u0435 \u0443\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 .NET Core \u0432 2015 \u0433\u043e\u0434\u0443. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435: &#171;<a href=\"https:\/\/www.viva64.com\/ru\/b\/0365\/\">\u041d\u043e\u0432\u043e\u0433\u043e\u0434\u043d\u044f\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 .NET Core Libraries (CoreFX)<\/a>&#171;.<\/p>\n<h2>\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438, \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430<\/h2>\n<p>  \u041a\u0430\u043a \u0438 \u0432\u0441\u0435\u0433\u0434\u0430, \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0445 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u0445, \u0430 \u043b\u0438\u0448\u044c \u0437\u0430\u0442\u0435\u043c \u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.<\/p>\n<p>  \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u044f \u044f\u0432\u043d\u043e \u043e\u0434\u0435\u043b\u0438\u043b \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u0435\u0442\u043e\u043a \u0432\u0438\u0434\u0430 <b>Issue N<\/b> \u2014 \u0442\u0430\u043a \u043b\u0435\u0433\u0447\u0435 \u043f\u043e\u043d\u044f\u0442\u044c, \u0433\u0434\u0435 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0431\u043e\u0440 \u0434\u0440\u0443\u0433\u043e\u0439. \u0414\u0430 \u0438 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u0442\u0430\u043a \u0442\u043e\u0436\u0435 \u043f\u0440\u043e\u0449\u0435.<\/p>\n<p>  <b>Issue 1<\/b>  <\/p>\n<pre><code class=\"cs\">abstract 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);     }     ....   }   .... }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3095\/\">V3095<\/a> The &#8216;context&#8217; object was used before it was verified against null. Check lines: 340, 346. Principal.cs 340<\/p>\n<p>  \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u044f\u0432\u043d\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null<\/i> \u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <i>context<\/i> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u043c, \u0438 \u0445\u043e\u0442\u044f\u0442 \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 <i>InvalidOperationException<\/i>. \u041e\u0434\u043d\u0430\u043a\u043e \u0447\u0443\u0442\u044c \u0432\u044b\u0448\u0435, \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0435 \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 <i>context<\/i> \u2014 <i>context.ContextType<\/i>. \u0412 \u0438\u0442\u043e\u0433\u0435, \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>context<\/i> \u2014 <i>null<\/i>, \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e <i>InvalidOperationExcetion<\/i> \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <i>NullReferenceException<\/i>.<\/p>\n<p>  \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 (<i>System.DirectoryServices.AccountManagement<\/i>) \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:  <\/p>\n<pre><code class=\"cs\">GroupPrincipal groupPrincipal    = new GroupPrincipal(new PrincipalContext(ContextType.Machine)); groupPrincipal.Save(null);<\/code><\/pre>\n<p>  <i>GroupPrincipal<\/i> \u2014 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 <i>Principal<\/i>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u043d\u0430\u043c \u043c\u0435\u0442\u043e\u0434\u0430 <i>Save<\/i>. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043a\u043e\u0434 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0438 \u0432\u0438\u0434\u0438\u043c \u0442\u043e, \u0447\u0442\u043e \u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/290\/09a\/2cc\/29009a2cc3a5408808b9814d48bb0dea.png\" alt=\"Picture 1\"><\/div>\n<p>  \u0420\u0430\u0434\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043f\u0430\u043a\u0435\u0442 \u0438\u0437 NuGet \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u042f \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u043f\u0430\u043a\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 4.5.0 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/3de\/891\/b4a\/3de891b4a4ba8100bb63af19e4455842.png\" alt=\"Picture 2\"><\/div>\n<p>  <b>Issue 2<\/b>  <\/p>\n<pre><code class=\"cs\">private SearchResultCollection FindAll(bool findMoreThanOne) {   searchResult = null;    DirectoryEntry clonedRoot = null;   if (_assertDefaultNamingContext == null)   {     clonedRoot = SearchRoot.CloneBrowsable();   }   else   {     clonedRoot = SearchRoot.CloneBrowsable();   }   .... }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3004\/\">V3004<\/a> The &#8216;then&#8217; statement is equivalent to the &#8216;else&#8217; statement. DirectorySearcher.cs 629<\/p>\n<p>  \u0412\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0438\u0441\u0442\u0438\u043d\u043d\u043e\u0441\u0442\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f <i>_assertDefaultNamingContext == null<\/i> \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u0442\u0430\u043a \u043a\u0430\u043a <i>then<\/i> \u0438 <i>else<\/i> \u0432\u0435\u0442\u0432\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <i>if<\/i> \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0442\u0435\u043b\u0430. \u041b\u0438\u0431\u043e \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0432\u0435\u0442\u0432\u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u043b\u0438\u0431\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <i>if<\/i>, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0441\u043c\u0443\u0449\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440.<\/p>\n<p>  <b>Issue 3<\/b>  <\/p>\n<pre><code class=\"cs\">public class DirectoryEntry : Component {   ....   public void RefreshCache(string[] propertyNames)   {     ....     object[] names = new object[propertyNames.Length];     for (int i = 0; i &lt; propertyNames.Length; i++)       names[i] = propertyNames[i];         ....     if (_propertyCollection != null &amp;&amp; propertyNames != null)       ....     ....   }   .... }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3095\/\">V3095<\/a> The &#8216;propertyNames&#8217; object was used before it was verified against null. Check lines: 990, 1004. DirectoryEntry.cs 990<\/p>\n<p>  \u041e\u043f\u044f\u0442\u044c \u0432\u0438\u0434\u0438\u043c \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439. \u0412 \u043c\u0435\u0442\u043e\u0434\u0435 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 <i>propertyNames != null<\/i>, \u0442.\u0435. \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u0442\u0440\u0430\u0445\u0443\u044e\u0442 \u0441\u0435\u0431\u044f \u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432 \u043c\u0435\u0442\u043e\u0434 \u043f\u0440\u0438\u0434\u0451\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null<\/i>. \u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0448\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043f\u043e \u044d\u0442\u043e\u0439 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0435 \u2014 <i>propertyNames.Length<\/i> \u0438 <i>propertyNames[i]<\/i>. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c \u2014 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 <i>NullReferenceExcepption<\/i> \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0432 \u043c\u0435\u0442\u043e\u0434 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0443\u043b\u0435\u0432\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430.<\/p>\n<p>  \u041a\u0430\u043a\u043e\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435, \u0447\u0442\u043e <i>RefreshCache<\/i> \u2014 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443? \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u043d\u0443\u0436\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u2014 <i>System.DirectoryServices<\/i> \u2014 \u0438 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0438\u0434\u0430:  <\/p>\n<pre><code class=\"cs\">DirectoryEntry de = new DirectoryEntry(); de.RefreshCache(null);<\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043a\u043e\u0434 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0438 \u0432\u0438\u0434\u0438\u043c \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/2d9\/040\/d0a\/2d9040d0ae8d91394c476d6788aa7275.png\" alt=\"Picture 3\"><\/div>\n<p>  \u0420\u0430\u0434\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043d\u0430 \u0440\u0435\u043b\u0438\u0437\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 NuGet \u043f\u0430\u043a\u0435\u0442\u0430. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 NuGet \u043f\u0430\u043a\u0435\u0442 <i>System.DirectoryServices<\/i> (\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0432\u0435\u0440\u0441\u0438\u044e 4.5.0) \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0443\u0436\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u2014 \u043d\u0438\u0436\u0435.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/0d6\/31e\/309\/0d631e3096fa8ba00b41fe10ad1001db.png\" alt=\"Picture 4\"><\/div>\n<p>  <b>Issue 4<\/b><\/p>\n<p>  \u0421\u0435\u0439\u0447\u0430\u0441 \u043c\u044b \u043f\u043e\u0439\u0434\u0451\u043c \u043e\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u2014 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430, \u0430 \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0432\u043d\u0443\u0442\u0440\u044c. \u041e\u0431\u0440\u0430\u0442\u0438\u043c\u0441\u044f \u043a \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 <i>System.Drawing.CharacterRange<\/i> \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <i>System.Drawing.Common<\/i> \u0438 \u043e\u0434\u043d\u043e\u0438\u043c\u0451\u043d\u043d\u043e\u0433\u043e NuGet \u043f\u0430\u043a\u0435\u0442\u0430.<\/p>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c:  <\/p>\n<pre><code class=\"cs\">CharacterRange range = new CharacterRange(); bool eq = range.Equals(null); Console.WriteLine(eq);<\/code><\/pre>\n<p>  \u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439, \u0447\u0442\u043e\u0431\u044b \u043e\u0441\u0432\u0435\u0436\u0438\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c, \u043e\u0431\u0440\u0430\u0442\u0438\u043c\u0441\u044f \u043a <a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/system.object.equals?view=netcore-3.0\">docs.microsoft.com<\/a>, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u043a\u0430\u043a\u043e\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <i>obj.Equals(null)<\/i>:<\/p>\n<p>  <i>The following statements must be true for all implementations of the <a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/system.object.equals?view=netframework-4.8#System_Object_Equals_System_Object_\"><i>Equals(Object)<\/i><\/a> method. In the list, x, y, and z represent object references that are not null.<\/i><\/p>\n<p>  <i>&#8230;.<\/i><\/p>\n<p>  <b><i>x.Equals(null) returns false.<\/i><\/b><\/p>\n<p>  \u041a\u0430\u043a \u0432\u044b \u0434\u0443\u043c\u0430\u0435\u0442\u0435, \u0431\u0443\u0434\u0435\u0442 \u043b\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0432\u044b\u0432\u0435\u0434\u0435\u043d \u0442\u0435\u043a\u0441\u0442 \u00abFalse\u00bb? \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0435\u0442, \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e. \ud83d\ude42 \u0418\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043a\u043e\u0434 \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/e87\/159\/8f6\/e871598f6ca5dacdb4a4fae7b5776520.png\" alt=\"Picture 5\"><\/div>\n<p>  \u042d\u0442\u043e \u0431\u044b\u043b \u0432\u044b\u0432\u043e\u0434 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435 \u043a\u043e\u0434\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c NuGet \u043f\u0430\u043a\u0435\u0442\u0430 <i>System.Drawing.Common<\/i> \u0432\u0435\u0440\u0441\u0438\u0438 4.5.1. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0442\u043e\u0442 \u0436\u0435 \u043a\u043e\u0434 \u0441 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u0432\u0438\u0434\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/6e9\/f27\/f1a\/6e9f27f1a78768078fdd940e0a4be0ad.png\" alt=\"Picture 6\"><\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u2014 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043c\u0435\u0442\u043e\u0434\u0430 <i>Equals<\/i> \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 <i>CharacterRange<\/i> \u0438 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430:  <\/p>\n<pre><code class=\"cs\">public override bool Equals(object obj) {   if (obj.GetType() != typeof(CharacterRange))     return false;    CharacterRange cr = (CharacterRange)obj;   return ((_first == cr.First) &amp;&amp; (_length == cr.Length)); }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3115\/\">V3115<\/a> Passing &#8216;null&#8217; to &#8216;Equals&#8217; method should not result in &#8216;NullReferenceException&#8217;. CharacterRange.cs 56<\/p>\n<p>  \u0412\u0438\u0434\u0438\u043c \u0442\u043e, \u0447\u0442\u043e \u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u2014 \u043d\u0435\u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <i>obj<\/i>, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u0432 \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 <i>GetType<\/i> \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 <i>NullReferenceException<\/i>.<\/p>\n<p>  <b>Issue 5<\/b><\/p>\n<p>  \u041f\u043e\u043a\u0430 \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c \u044d\u0442\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0449\u0451 \u043e\u0434\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u2014 \u043c\u0435\u0442\u043e\u0434 <i>Icon.Save<\/i>. \u041f\u0435\u0440\u0435\u0434 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u0430.<\/p>\n<p>  \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a \u043c\u0435\u0442\u043e\u0434\u0443 \u043d\u0435\u0442:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/ffd\/fef\/402\/ffdfef402f77c462c94b9ff284f42e0c.png\" alt=\"Picture 7\"><\/div>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u043c\u0441\u044f \u043a docs.microsoft.com \u2014 &#171;<a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/system.drawing.icon.save?view=netcore-3.0\">Icon.Save(Stream) Method<\/a>&#171;. \u0422\u0430\u043c, \u0432\u043f\u0440\u043e\u0447\u0435\u043c, \u0442\u043e\u0436\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u043d\u0430 \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u0445 \u043d\u0435\u0442.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044e \u043a\u043e\u0434\u0430.  <\/p>\n<pre><code class=\"cs\">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\");       ....     }   }   .... }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3095\/\">V3095<\/a> The &#8216;outputStream&#8217; object was used before it was verified against null. Check lines: 654, 672. Icon.Windows.cs 654<\/p>\n<p>  \u041e\u043f\u044f\u0442\u044c \u0443\u0436\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043d\u0430\u043c \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u2014 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435 \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043c\u0435\u0442\u043e\u0434\u0430 \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 <i>null<\/i>. \u0412\u043d\u043e\u0432\u044c \u0443\u0434\u0430\u0447\u043d\u043e\u0435 \u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432 \u2014 \u0438 \u043a\u043b\u0430\u0441\u0441, \u0438 \u043c\u0435\u0442\u043e\u0434 \u2014 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435, \u0437\u043d\u0430\u0447\u0438\u0442, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443.<\/p>\n<p>  \u0417\u0430\u0434\u0430\u0447\u0430 \u043f\u0440\u043e\u0441\u0442\u0430 \u2014 \u0434\u043e\u0432\u0435\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0434\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <i>outputStream.Write(_iconData, 0, _iconData.Length);<\/i>, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0432 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <i>outputStream<\/i> \u2014 <i>null<\/i>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u043e\u0441\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u0435 <i>_iconData != null<\/i>.<\/p>\n<p>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440:  <\/p>\n<pre><code class=\"cs\">public Icon(string fileName) : this(fileName, 0, 0) { }<\/code><\/pre>\n<p>  \u041e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u0443\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0443. \u0425\u043e\u0440\u043e\u0448\u043e, \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0430\u043b\u044c\u0448\u0435 \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0437\u0434\u0435\u0441\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440.  <\/p>\n<pre><code class=\"cs\">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); }<\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u043e\u043d\u043e, \u0442\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e. \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430, \u0435\u0441\u043b\u0438 \u043c\u044b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u0438, \u0435\u0441\u043b\u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0430\u0434\u0435\u043d\u0438\u0439 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <i>Initialize<\/i> \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043f\u043e\u043b\u0435 <i>_iconData<\/i> \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442, \u0447\u0442\u043e \u043d\u0430\u043c \u0438 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<p>  \u0412\u044b\u0445\u043e\u0434\u0438\u0442, \u0434\u043b\u044f \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 <i>Icon<\/i> \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043a\u043e\u043d\u043a\u0438, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <i>Save<\/i>, \u043f\u0435\u0440\u0435\u0434\u0430\u0432 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null<\/i>, \u0447\u0442\u043e \u043c\u044b \u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u043c. \u041a\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<pre><code class=\"cs\">Icon icon = new Icon(@\"D:\\document.ico\"); icon.Save(null);<\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/b37\/fdb\/dd1\/b37fdbdd1288c054fdaaa0add0ffcfcf.png\" alt=\"Picture 8\"><\/div>\n<p>  <b>Issue 6<\/b><\/p>\n<p>  \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u043e\u0431\u0437\u043e\u0440 \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 <i>System.Management<\/i>. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 3 \u043e\u0442\u043b\u0438\u0447\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c\u0438, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c\u0438 \u0432 <i>case <\/i> <i>CimType.UInt32<\/i> \u0438 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 <i>case<\/i>.  <\/p>\n<pre><code class=\"cs\">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; }<\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043e\u0442\u043b\u0438\u0447\u0438\u0439 \u043d\u0435\u0442, \u043e \u0447\u0451\u043c \u0438 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440.<\/p>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3139\/\">V3139<\/a> Two or more case-branches perform the same actions. WMIGenerator.cs 5220<\/p>\n<p>  \u0422\u0430\u043a\u043e\u0439 \u0441\u0442\u0438\u043b\u044c \u043a\u043e\u0434\u0430 \u043b\u0438\u0447\u043d\u043e \u043c\u043d\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043d\u044f\u0442\u0435\u043d. \u0415\u0441\u043b\u0438 \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0438, \u0434\u0443\u043c\u0430\u044e, \u043d\u0435 \u0441\u0442\u043e\u0438\u043b\u043e \u0440\u0430\u0437\u043d\u043e\u0441\u0438\u0442\u044c \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u043b\u043e\u0433\u0438\u043a\u0443 \u043f\u043e \u0440\u0430\u0437\u043d\u044b\u043c \u043a\u0435\u0439\u0441\u0430\u043c.<\/p>\n<p>  <b>Issue 7<\/b><\/p>\n<p>  \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <i>Microsoft.CSharp<\/i>.  <\/p>\n<pre><code class=\"cs\">private static IList&lt;KeyValuePair&lt;string, object&gt;&gt; QueryDynamicObject(object obj) {   ....   List&lt;string&gt; names = new List&lt;string&gt;(mo.GetDynamicMemberNames());   names.Sort();   if (names != null)   { .... }   .... }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3022\/\">V3022<\/a> Expression &#8216;names != null&#8217; is always true. DynamicDebuggerProxy.cs 426<\/p>\n<p>  \u042f \u0431\u044b, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u043c\u043e\u0433 \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u043d\u0430\u0440\u0430\u0432\u043d\u0435 \u0441\u043e \u043c\u043d\u043e\u0433\u0438\u043c\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0432\u044b\u0434\u0430\u043d\u044b \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0430\u043c\u0438 <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3022\/\">V3022<\/a> \u0438 <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3063\/\">V3063<\/a>. \u0411\u044b\u043b\u043e \u043c\u043d\u043e\u0433\u043e (\u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e) \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a, \u043d\u043e \u044d\u0442\u0430 \u0447\u0435\u043c-\u0442\u043e \u0437\u0430\u043f\u0430\u043b\u0430 \u043c\u043d\u0435 \u0432 \u0434\u0443\u0448\u0443. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435\u043c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <i>names<\/i> \u0441 <i>null<\/i> \u0432 \u044d\u0442\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043c\u0430\u043b\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u0442\u0430\u043a \u0435\u0449\u0451 \u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u044b\u0437\u043e\u0432 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 <i>Sort<\/i>. \u042d\u0442\u043e \u043d\u0435 \u043e\u0448\u0438\u0431\u043a\u0430, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u043e \u043c\u0435\u0441\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435, \u043a\u0430\u043a \u043f\u043e \u043c\u043d\u0435.<\/p>\n<p>  <b>Issue 8<\/b><\/p>\n<p>  \u0412\u043e\u0442 \u0435\u0449\u0451 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430.  <\/p>\n<pre><code class=\"cs\">private static void InsertChildNoGrow(Symbol child) {   ....   while (sym?.nextSameName != null)   {     sym = sym.nextSameName;   }    Debug.Assert(sym != null &amp;&amp; sym.nextSameName == null);   sym.nextSameName = child;   .... }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3042\/\">V3042<\/a> Possible NullReferenceException. The &#8216;?.&#8217; and &#8216;.&#8217; operators are used for accessing members of the &#8216;sym&#8217; object SymbolStore.cs 56<\/p>\n<p>  \u0421\u043c\u043e\u0442\u0440\u0438\u0442\u0435, \u0432 \u0447\u0451\u043c \u0437\u0434\u0435\u0441\u044c \u0448\u0442\u0443\u043a\u0430. \u0426\u0438\u043a\u043b \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0434\u0432\u0443\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u0439:<\/p>\n<ul>\n<li><i>sym == null<\/i>;<\/li>\n<li><i>sym.nextSameName == null<\/i>.<\/li>\n<\/ul>\n<p>  \u0421\u043e \u0432\u0442\u043e\u0440\u044b\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435\u0442, \u0447\u0435\u0433\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043f\u0435\u0440\u0432\u043e\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0438\u0436\u0435 \u0438\u0434\u0451\u0442 \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043d\u043e\u043c\u0443 \u043f\u043e\u043b\u044e <i>nextSameName<\/i> \u0438, \u0435\u0441\u043b\u0438 <i>sym<\/i> \u2014 <i>null<\/i>, \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <i>NullReferenceException<\/i>.<\/p>\n<p>  \u00ab\u0422\u044b \u0447\u0442\u043e, \u043e\u0441\u043b\u0435\u043f? \u0415\u0441\u0442\u044c \u0436\u0435 \u0432\u044b\u0437\u043e\u0432 <i>Debug.Assert<\/i>, \u0433\u0434\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f, \u0447\u0442\u043e <i>sym != null<\/i>\u00bb \u2014 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u0440\u0430\u0437\u0438\u0442\u044c \u043a\u0442\u043e-\u0442\u043e. \u041d\u043e \u0432 \u044d\u0442\u043e\u043c \u0438 \u0432\u0441\u044f \u0441\u043e\u043b\u044c! \u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0432 Release \u0432\u0435\u0440\u0441\u0438\u0438 <i>Debug.Assert<\/i> \u043d\u0438\u0447\u0435\u043c \u043d\u0435 \u043f\u043e\u043c\u043e\u0436\u0435\u0442, \u0438 \u043f\u0440\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c \u0432\u044b\u0448\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0432\u0441\u0451, \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u2014 <i>NullReferenceException<\/i>. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u044f \u0443\u0436\u0435 \u0432\u0438\u0434\u0435\u043b \u043f\u043e\u0434\u043e\u0431\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043e\u0442 Microsoft \u2014 <a href=\"https:\/\/github.com\/dotnet\/roslyn\">Roslyn<\/a>, \u0433\u0434\u0435 \u0431\u044b\u043b\u0430 \u043d\u0443 \u0443\u0436 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0441 <i>Debug.Assert<\/i>. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0442\u0432\u043b\u0435\u043a\u0443\u0441\u044c \u043d\u0430 Roslyn \u0441 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043b\u0438\u0431\u043e \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a <i>Microsoft.CodeAnalysis<\/i>, \u043b\u0438\u0431\u043e \u043f\u0440\u044f\u043c\u043e \u0432 Visual Studio \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 Syntax Visualizer. \u041d\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 Visual Studio 16.1.6 + Syntax Visualizer 1.0 \u044d\u0442\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0435\u0449\u0451 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f.<\/p>\n<p>  \u0414\u043b\u044f \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u043a\u043e\u0434\u0430:  <\/p>\n<pre><code class=\"cs\">class C1&lt;T1, T2&gt; {   void foo()   {     T1 val = default;     if (val is null)     { }   } }<\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0432 Syntax Visualizer \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0443\u0437\u0435\u043b \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u0442\u0438\u043f\u0430 <i>ConstantPatternSyntax<\/i>, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 <i>null <\/i> \u0432 \u043a\u043e\u0434\u0435 \u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0434\u043b\u044f \u043d\u0435\u0433\u043e <i>TypeSymbol<\/i>.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/855\/b9c\/baa\/855b9cbaa67c9a5909117d513e154293.png\" alt=\"Picture 9\"><\/div>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e Visual Studio \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u0437\u0430\u0439\u0434\u0451\u043c \u0432 Event Viewer, \u043d\u0430\u0439\u0434\u0451\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0445 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445:  <\/p>\n<pre><code class=\"cs\">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           &lt;System.String,System.Resources.ResourceSet&gt;, 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() ....<\/code><\/pre>\n<p>  \u0418 \u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u0441 devenv.exe:  <\/p>\n<pre><code class=\"cs\">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 ....<\/code><\/pre>\n<p>  \u0418\u043c\u0435\u044f \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a Roslyn \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043c\u0435\u0441\u0442\u043e, \u0433\u0434\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435:  <\/p>\n<pre><code class=\"cs\">private Conversion ClassifyImplicitBuiltInConversionSlow(   TypeSymbol source, TypeSymbol destination,    ref HashSet&lt;DiagnosticInfo&gt; 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;   }   .... }<\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c, \u043a\u0430\u043a \u0438 \u0432 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u043e\u043c \u0432\u044b\u0448\u0435 \u043a\u043e\u0434\u0435 \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a .NET Core \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 <i>Debug.Assert<\/i>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u043e\u0434\u043d\u0430\u043a\u043e, \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u043b\u0430 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0435\u043b\u0438\u0437\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a.<\/p>\n<p>  <b>Issue 9<\/b><\/p>\n<p>  \u041e\u0442\u0432\u043b\u0435\u043a\u043b\u0438\u0441\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u2014 \u0438 \u0445\u0432\u0430\u0442\u0438\u0442, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c .NET Core. \u041f\u0430\u043a\u0435\u0442 <i>System.IO.IsolatedStorage <\/i> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043a\u043e\u0434.  <\/p>\n<pre><code class=\"cs\">private bool ContainsUnknownFiles(string directory) {   ....    return (files.Length &gt; 2 ||     (       (!IsIdFile(files[0]) &amp;&amp; !IsInfoFile(files[0]))) ||       (files.Length == 2 &amp;&amp; !IsIdFile(files[1]) &amp;&amp; !IsInfoFile(files[1]))     ); }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3088\/\">V3088<\/a> The expression was enclosed by parentheses twice: ((expression)). One pair of parentheses is unnecessary or misprint is present. IsolatedStorageFile.cs 839<\/p>\n<p>  \u0421\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0441\u0431\u0438\u0432\u0430\u0435\u0442 \u0441 \u0442\u043e\u043b\u043a\u0443 \u2014 \u043d\u0435 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0438\u0447\u0435\u0433\u043e. \u041c\u0435\u043b\u044c\u043a\u043e\u043c \u043f\u0440\u043e\u0431\u0435\u0433\u0430\u044f\u0441\u044c \u0432\u0437\u0433\u043b\u044f\u0434\u043e\u043c \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u0434\u0443, \u044f \u0431\u044b \u0441\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u043b\u0435\u0432\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u043d\u0434 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 || \u2014 <i>files.Length &gt; 2<\/i>, \u043f\u0440\u0430\u0432\u044b\u0439 \u2014 \u0442\u043e, \u0447\u0442\u043e \u0432 \u0441\u043a\u043e\u0431\u043a\u0430\u0445. \u041f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043a\u043e\u0434 \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0442\u0430\u043a. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u0447\u0443\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u0435\u0435, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u0440\u0430\u0432\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u043d\u0434 \u2014 <i>((!IsIdFile(files[0]) &amp;&amp; !IsInfoFile(files[0])))<\/i>. \u041f\u043e-\u043c\u043e\u0435\u043c\u0443, \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043f\u043e\u0440\u044f\u0434\u043e\u0447\u043d\u043e \u0441\u0431\u0438\u0432\u0430\u0435\u0442 \u0441 \u0442\u043e\u043b\u043a\u0443. <\/p>\n<p>  <b>Issue 10<\/b><\/p>\n<p>  \u0412 \u0440\u0435\u043b\u0438\u0437\u0435 PVS-Studio 7.03 \u0431\u044b\u043b\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3138\/\">V3138<\/a>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0438\u0449\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a\u0430\u0445. \u0422\u043e\u0447\u043d\u0435\u0435, \u0432 \u0441\u0442\u0440\u043e\u043a\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438, \u043d\u043e \u0438\u0437-\u0437\u0430 \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 <i>$<\/i> \u0442\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f. \u0412 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 <i>System.Net<\/i> \u043d\u0430\u0448\u043b\u043e\u0441\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0439 \u044d\u0442\u043e\u0433\u043e \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430.  <\/p>\n<pre><code class=\"cs\">internal static void CacheCredential(SafeFreeCredentials newHandle) {   try   {     ....   }   catch (Exception e)   {     if (!ExceptionCheck.IsFatal(e))     {       NetEventSource.Fail(null, \"Attempted to throw: {e}\");     }   } }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3138\/\">V3138<\/a> String literal contains potential interpolated expression. Consider inspecting: e. SSPIHandleCache.cs 42<\/p>\n<p>  \u041e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u043c\u0435\u0442\u043e\u0434\u0430 <i>Fail<\/i> \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u044b \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u043e\u0441\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f <i>e<\/i>. \u041e\u0434\u043d\u0430\u043a\u043e \u0438\u0437-\u0437\u0430 \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 <i>$ <\/i> \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u0435 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f.<\/p>\n<p>  <b>Issue 11<\/b><\/p>\n<p>  \u0412\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u0441\u044f \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439.  <\/p>\n<pre><code class=\"cs\">public static async Task&lt;string&gt; GetDigestTokenForCredential(....) {   ....   if (NetEventSource.IsEnabled)     NetEventSource.Error(digestResponse,                           \"Algorithm not supported: {algorithm}\");   .... }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3138\/\">V3138<\/a> String literal contains potential interpolated expression. Consider inspecting: algorithm. AuthenticationHelper.Digest.cs 58<\/p>\n<p>  \u0421\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u0432\u044b\u0448\u0435, \u043e\u043f\u044f\u0442\u044c \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d \u0441\u0438\u043c\u0432\u043e\u043b <i>$<\/i> \u2014 \u0432 \u043c\u0435\u0442\u043e\u0434 <i>Error <\/i> \u0438\u0434\u0451\u0442 \u043d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430.<\/p>\n<p>  <b>Issue 12<\/b><\/p>\n<p>  \u041f\u0430\u043a\u0435\u0442 <i>System.Net.Mail<\/i>. \u041c\u0435\u0442\u043e\u0434 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0435\u0433\u043e \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u0448\u0438\u0431\u043a\u0443 \u0431\u044b\u043b\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u0447\u0443\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435.  <\/p>\n<pre><code class=\"cs\">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; }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3008\/\">V3008<\/a> The &#8216;_streamSet&#8217; variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 123, 119. MimePart.cs 123<\/p>\n<p>  \u0421\u0442\u0440\u0430\u043d\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0434\u0432\u043e\u0439\u043d\u043e\u0435 \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <i>_streamSet<\/i> (\u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u2014 \u043f\u043e\u0434 \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c; \u043f\u043e\u0442\u043e\u043c \u2014 \u0432\u043d\u0435). \u0422\u0430 \u0436\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0438 \u0441 \u043e\u0431\u043d\u0443\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <i>_stream<\/i>. \u0412 \u0438\u0442\u043e\u0433\u0435 <i>_stream<\/i> \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>stream<\/i>, \u0430 <i>_streamSet<\/i> \u2014 <i>true<\/i>.<\/p>\n<p>  <b>Issue 13<\/b><\/p>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <i>System.Linq.Expressions<\/i>, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0432\u044b\u0434\u0430\u043b \u0441\u0440\u0430\u0437\u0443 2 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u00ab\u0444\u0438\u0447\u0430\u00bb, \u0447\u0435\u043c \u0431\u0430\u0433, \u043d\u043e \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u043c\u0435\u0442\u043e\u0434 \u0432\u0435\u0441\u044c\u043c\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439\u2026  <\/p>\n<pre><code class=\"cs\">\/\/ throws NRE when o is null protected static void NullCheck(object o) {   if (o == null)   {     o.GetType();   } }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f PVS-Studio<\/b>:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.viva64.com\/ru\/w\/v3010\/\">V3010<\/a> The return value of function &#8216;GetType&#8217; is required to be utilized. Instruction.cs 36<\/li>\n<li><a href=\"https:\/\/www.viva64.com\/ru\/w\/v3080\/\">V3080<\/a> Possible null dereference. Consider inspecting &#8216;o&#8217;. Instruction.cs 36<\/li>\n<\/ul>\n<p>  \u0422\u0443\u0442, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0434\u0430\u0436\u0435 \u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0447\u0435\u0433\u043e.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/5c9\/a88\/a22\/5c9a88a221d4cd5ba5f4f1d9f74a346b.png\" alt=\"Picture 20\"><\/div>\n<p>  <b>Issue 14<\/b><\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0441\u043b\u0443\u0447\u0430\u0439, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u00ab\u0438\u0437\u0432\u043d\u0435\u00bb. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434, \u0432\u044b\u044f\u0432\u0438\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0430 \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0432\u043d\u0443\u0442\u0440\u044c. \u0414\u043b\u044f \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <i>System.Configuration.ConfigurationManager<\/i> \u0438 \u043e\u0434\u043d\u043e\u0438\u043c\u0451\u043d\u043d\u044b\u0439 NuGet \u043f\u0430\u043a\u0435\u0442. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043f\u0430\u043a\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 4.5.0. \u0411\u0443\u0434\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043a\u043b\u0430\u0441\u0441\u043e\u043c <i>System.Configuration.CommaDelimitedStringCollection<\/i>. <\/p>\n<p>  \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u0438\u0442\u0440\u043e\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442, \u0438\u0437\u0432\u043b\u0435\u0447\u0451\u043c \u0435\u0433\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0434\u043b\u0438\u043d\u0443 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u043c \u0435\u0451. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:  <\/p>\n<pre><code class=\"cs\">CommaDelimitedStringCollection collection    = new CommaDelimitedStringCollection(); Console.WriteLine(collection.ToString().Length);<\/code><\/pre>\n<p>  \u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 <i>ToString<\/i>:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/8dc\/544\/56d\/8dc54456dd1296d89fbe447fac71ac17.png\" alt=\"Picture 11\"><\/div>\n<p>  \u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430. \u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u0433\u043b\u044f\u043d\u0443 \u043d\u0430 docs.microsoft.com \u2014 &#171;<a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/system.configuration.commadelimitedstringcollection.tostring?view=netcore-3.0\">CommaDelimitedStringCollection.ToString Method<\/a>&#171;. \u0412\u0440\u043e\u0434\u0435 \u0431\u044b \u0442\u043e\u0436\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0433\u043e. <\/p>\n<p>  \u0425\u043e\u0440\u043e\u0448\u043e, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043a\u043e\u0434 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u0438\u0438\u0438\u2026<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/fa5\/89f\/1af\/fa589f1afc8ceb9415694e1261e59ab7.png\" alt=\"Picture 12\"><\/div>\n<p>  \u0425\u043c, \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e. \u0427\u0442\u043e \u0436, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e, \u0438 \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0435\u0451 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435. \u00ab\u0421\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u00bb \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 :). \u041a\u043e\u0434 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f \u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cs\">CommaDelimitedStringCollection collection    = new CommaDelimitedStringCollection(); collection.Add(String.Empty); Console.WriteLine(collection.ToString().Length);<\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0438 \u0432\u0438\u0434\u0438\u043c\u2026<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/d37\/4bc\/d2e\/d374bcd2ed23bd048276493ed19d30fe.png\" alt=\"Picture 13\"><\/div>\n<p>  \u0427\u0442\u043e, \u043e\u043f\u044f\u0442\u044c?! \u0427\u0442\u043e \u0436, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0443\u0436\u0435 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043c\u0435\u0442\u043e\u0434\u0430 <i>ToString<\/i> \u043a\u043b\u0430\u0441\u0441\u0430 <i>CommaDelimitedStringCollection<\/i>. \u041a\u043e\u0434 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043d\u0438\u0436\u0435:  <\/p>\n<pre><code class=\"cs\">public override string ToString() {     if (Count &lt;= 0) return null;      StringBuilder sb = new StringBuilder();     foreach (string str in this)     {         ThrowIfContainsDelimiter(str);         \/\/ ....         sb.Append(str.Trim());         sb.Append(',');     }      if (sb.Length &gt; 0) sb.Length = sb.Length - 1;     return sb.Length == 0 ? null : sb.ToString(); }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f PVS-Studio<\/b>:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.viva64.com\/ru\/w\/v3108\/\">V3108<\/a> It is not recommended to return &#8216;null&#8217; from &#8216;ToSting()&#8217; method. StringAttributeCollection.cs 57<\/li>\n<li><a href=\"https:\/\/www.viva64.com\/ru\/w\/v3108\/\">V3108<\/a> It is not recommended to return &#8216;null&#8217; from &#8216;ToSting()&#8217; method. StringAttributeCollection.cs 71<\/li>\n<\/ul>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0432\u0438\u0434\u0438\u043c 2 \u043c\u0435\u0441\u0442\u0430, \u0433\u0434\u0435 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f <i>ToString<\/i> \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null<\/i>. \u0412\u0441\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u0441\u043e\u0432\u0435\u0442\u0443\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c Microsoft \u043f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 <i>ToString<\/i>, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u0432\u043d\u043e\u0432\u044c \u043e\u0431\u0440\u0430\u0442\u0438\u043c\u0441\u044f \u043a docs.microsoft.com \u2014 &#171;<a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/system.object.tostring?view=netcore-3.0\">Object.ToString Method<\/a>&#171;:<\/p>\n<p>  <i>Notes to Inheritors&#8230;.Overrides of the ToString() method should follow these guidelines:<\/i><\/p>\n<ul>\n<li><i>&#8230;.<\/i><\/li>\n<li><i>Your ToString() override should not return Empty or a <\/i><b><i>null<\/i><\/b><i> string.<\/i><\/li>\n<li><i>&#8230;.<\/i><\/li>\n<\/ul>\n<p>  \u041e\u0431 \u044d\u0442\u043e\u043c, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0438 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0435\u0442 PVS-Studio. \u0414\u0432\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0445 \u0432\u044b\u0448\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043f\u0438\u0441\u0430\u043b\u0438 \u0434\u043b\u044f \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u044e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u0432\u044b\u0445\u043e\u0434\u0430 \u2014 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0438 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f <i>null<\/i> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u041a\u043e\u043f\u043d\u0451\u043c \u0447\u0443\u0442\u044c \u0433\u043b\u0443\u0431\u0436\u0435.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439. <i>Count<\/i> \u2014 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 <i>StringCollection<\/i>. \u0422\u0430\u043a \u043a\u0430\u043a \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u043d\u0435 \u0431\u044b\u043b\u043e, <i>Count == 0<\/i>, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0443\u0441\u043b\u043e\u0432\u0438\u0435 <i>Count &lt;= 0<\/i>, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null<\/i>.<\/p>\n<p>  \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <i>CommaDelimitedStringCollection.Add<\/i>.  <\/p>\n<pre><code class=\"cs\">public new void Add(string value) {   ThrowIfReadOnly();   ThrowIfContainsDelimiter(value);   _modified = true;   base.Add(value.Trim()); }<\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <i>ThrowIf&#8230;<\/i> \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>Count<\/i> \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0440\u0430\u0432\u043d\u044b\u043c 1. \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u043c\u0435\u0442\u043e\u0434\u0443 <i>ToString<\/i>. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <i>Count &lt;= 0<\/i> \u2014 <i>false<\/i>, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0432\u044b\u0445\u043e\u0434\u0430 \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u0430 \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438 \u043a\u043e\u0434 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0441\u0432\u043e\u0451 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435. \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0445\u043e\u0434 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438, \u0438 \u0432 <i>StringBuilder<\/i> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f 2 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u2014 \u043f\u0443\u0441\u0442\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0438 \u0437\u0430\u043f\u044f\u0442\u0430\u044f. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432 <i>sb<\/i> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u044f\u0442\u0430\u044f, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <i>Length<\/i>, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0440\u0430\u0432\u043d\u043e \u0435\u0434\u0438\u043d\u0438\u0446\u0435. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <i>sb.Length &gt; 0<\/i> \u2014 <i>true<\/i>, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0447\u0438\u0442\u0430\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 <i>sb.Length<\/i>, \u0442\u0435\u043f\u0435\u0440\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>sb.Length<\/i> \u2014 0. \u042d\u0442\u043e \u0432\u0435\u0434\u0451\u0442 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u0430 \u043e\u043f\u044f\u0442\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null<\/i>.<\/p>\n<p>  <b>Issue 15<\/b><\/p>\n<p>  \u0421\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e \u043c\u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u043e\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 <i>System.Configuration.ConfigurationProperty<\/i>. \u0412\u043e\u0437\u044c\u043c\u0451\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0441 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432:  <\/p>\n<pre><code class=\"cs\">public ConfigurationProperty(   string name,    Type type,    object defaultValue,    TypeConverter typeConverter,    ConfigurationValidatorBase validator,    ConfigurationPropertyOptions options,    string description);<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430:  <\/p>\n<pre><code class=\"cs\">\/\/   description: \/\/     The description of the configuration entity.<\/code><\/pre>\n<p>  \u0412 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u043d\u0430 docs.microsoft.com \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435. \u0427\u0442\u043e \u0436, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c, \u043a\u0430\u043a \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0442\u0435\u043b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430:  <\/p>\n<pre><code class=\"cs\">public ConfigurationProperty(...., string description) {     ConstructorInit(name, type, options, validator, typeConverter);      SetDefaultValue(defaultValue); }<\/code><\/pre>\n<p>  \u0410 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440-\u0442\u043e \u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3117\/\">V3117<\/a> Constructor parameter &#8216;description&#8217; is not used. ConfigurationProperty.cs 62<\/p>\n<p>  \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0435\u0433\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e, \u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0441\u0431\u0438\u0432\u0430\u0435\u0442 \u0441 \u0442\u043e\u043b\u043a\u0443.<\/p>\n<p>  <b>Issue 16<\/b><\/p>\n<p>  \u0412\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u043e\u0441\u044c \u0435\u0449\u0451 \u043e\u0434\u043d\u043e \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043c\u0435\u0441\u0442\u043e. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u043e\u0448\u0438\u0431\u043a\u0443 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u043a\u043e\u0434 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u043f\u0440\u0438\u0432\u043e\u0436\u0443 \u043d\u0438\u0436\u0435.  <\/p>\n<pre><code class=\"cs\">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; }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3117\/\">V3117<\/a> Constructor parameter &#8216;configSourceStreamVersion&#8217; is not used. SectionXmlInfo.cs 16<\/p>\n<p>  \u0415\u0441\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e, \u043f\u0440\u0430\u0432\u0434\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u043d\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u043e:  <\/p>\n<pre><code class=\"cs\">internal object ConfigSourceStreamVersion {   set { } }<\/code><\/pre>\n<p>  \u0412 \u043e\u0431\u0449\u0435\u043c, \u043a\u043e\u0434 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \/ \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0434\u043b\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438, \u043d\u043e \u044d\u0442\u043e \u043b\u0438\u0448\u044c \u043c\u043e\u0438 \u0434\u043e\u0433\u0430\u0434\u043a\u0438.<\/p>\n<p>  <b>Issue 17<\/b><\/p>\n<p>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043d\u0430\u0448\u043b\u043e\u0441\u044c \u0432 \u043a\u043e\u0434\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <i>System.Runtime.WindowsRuntime.UI.Xaml<\/i> \u0438 \u043e\u0434\u043d\u043e\u0438\u043c\u0451\u043d\u043d\u043e\u0433\u043e NuGet \u043f\u0430\u043a\u0435\u0442\u0430.  <\/p>\n<pre><code class=\"cs\">public struct RepeatBehavior : IFormattable {   ....   public override string ToString()   {     return InternalToString(null, null);   }   .... }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3108\/\">V3108<\/a> It is not recommended to return &#8216;null&#8217; from &#8216;ToSting()&#8217; method. RepeatBehavior.cs 113<\/p>\n<p>  \u0417\u043d\u0430\u043a\u043e\u043c\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0443\u0436\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0438 \u2014 \u043c\u0435\u0442\u043e\u0434 <i>ToString<\/i> \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null<\/i>. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u0440 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u043a\u043e\u0434\u0430, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0449\u0438\u0439, \u0447\u0442\u043e <i>RepeatBehavior.ToString<\/i> \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0435\u043d\u0443\u043b\u0435\u0432\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443, \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e \u0443\u0434\u0438\u0432\u043b\u0451\u043d. \u0414\u0430 \u0438 \u043e\u043f\u044f\u0442\u044c \u0436\u0435, \u044d\u0442\u043e \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0435 \u043e\u0442 \u0433\u0430\u0439\u0434\u043b\u0430\u0439\u043d\u043e\u0432 Microsoft.<\/p>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e <i>ToString<\/i> \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c <i>null<\/i> \u2014 \u043d\u0443\u0436\u043d\u043e \u043a\u043e\u043f\u043d\u0443\u0442\u044c \u0433\u043b\u0443\u0431\u0436\u0435 \u0438 \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432 \u043c\u0435\u0442\u043e\u0434 <i>InternalToString<\/i>.  <\/p>\n<pre><code class=\"cs\">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;     } }<\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b, \u0447\u0442\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0432 <i>switch <\/i> \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f <i>default <\/i> \u0432\u0435\u0442\u0432\u044c, <i>InternalToString <\/i> \u0432\u0435\u0440\u043d\u0451\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null<\/i>, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, <i>null <\/i> \u0432\u0435\u0440\u043d\u0451\u0442 \u0438 <i>ToString<\/i>. <\/p>\n<p>  <i>RepeatBehavior<\/i> \u2014 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u0430 <i>ToString<\/i> \u2014 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434, \u0442\u0430\u043a \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 <i>RepeatBehavior<\/i>, \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0443 \u043d\u0435\u0433\u043e \u043c\u0435\u0442\u043e\u0434 <i>ToString<\/i>, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e <i>_Type<\/i> \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0440\u0430\u0432\u043d\u044b\u043c <i>RepeatBehaviorType.Forever<\/i>, <i>RepeatBehaviorType.Count<\/i> \u0438\u043b\u0438 <i>RepeatBehaviorType.Duration<\/i>.<\/p>\n<p>  <i>_Type<\/i> \u2014 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0435 \u043f\u043e\u043b\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e:  <\/p>\n<pre><code class=\"cs\">public struct RepeatBehavior : IFormattable {   ....   private RepeatBehaviorType _Type;   ....   public RepeatBehaviorType Type   {     get { return _Type; }     set { _Type = value; }   }   .... }<\/code><\/pre>\n<p>  \u041f\u043e\u043a\u0430 \u0432\u0441\u0451 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435\u043f\u043b\u043e\u0445\u043e. \u0418\u0434\u0451\u043c \u0434\u0430\u043b\u044c\u0448\u0435, \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0438\u043f <i>RepeatBehaviorType<\/i>.  <\/p>\n<pre><code class=\"cs\">public enum RepeatBehaviorType {   Count,   Duration,   Forever }<\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, <i>RepeatBehaviorType<\/i> \u2014 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0435 \u0432\u0441\u0435 \u0442\u0440\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430. \u041f\u0440\u0438\u0447\u0451\u043c \u0432\u0441\u0435 \u044d\u0442\u0438 \u0442\u0440\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u043c \u043d\u0430\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438 <i>switch<\/i>. \u042d\u0442\u043e, \u043e\u0434\u043d\u0430\u043a\u043e, \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e <i>default<\/i> \u0432\u0435\u0442\u0432\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0438\u0436\u0438\u043c\u0430.<\/p>\n<p>  \u0414\u043b\u044f \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u0430\u043a\u0435\u0442 <i>System.Runtime.WindowsRuntime.UI.Xaml<\/i> (\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0432\u0435\u0440\u0441\u0438\u044e 4.3.0) \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434.  <\/p>\n<pre><code class=\"cs\">RepeatBehavior behavior = new RepeatBehavior() {     Type = (RepeatBehaviorType)666 }; Console.WriteLine(behavior.ToString() is null);<\/code><\/pre>\n<p>  \u0412 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f <i>True<\/i>, \u0430 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 <i>ToString<\/i> \u0432\u0435\u0440\u043d\u0443\u043b <i>null<\/i>, \u0442.\u043a. <i>_Type<\/i> \u043d\u0435 \u0431\u044b\u043b \u0440\u0430\u0432\u0435\u043d \u043d\u0438 \u043e\u0434\u043d\u043e\u043c\u0443 \u0438\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 <i>case<\/i> \u0432\u0435\u0442\u0432\u044f\u0445 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0448\u043b\u043e \u0432 \u0432\u0435\u0442\u0432\u044c <i>default<\/i>. \u0427\u0435\u0433\u043e \u043c\u044b, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0438 \u0434\u043e\u0431\u0438\u0432\u0430\u043b\u0438\u0441\u044c.<\/p>\n<p>  \u0425\u043e\u0447\u0443 \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043d\u0438 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043a \u043c\u0435\u0442\u043e\u0434\u0443, \u043d\u0438 \u043d\u0430 <a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/system.windows.media.animation.repeatbehavior.tostring?view=netcore-3.0#System_Windows_Media_Animation_RepeatBehavior_ToString\">docs.microsoft.com<\/a>, \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null<\/i>.<\/p>\n<p>  <b>Issue 18<\/b><\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439 \u0438\u0437 <i>System.Private.DataContractSerialization<\/i>.  <\/p>\n<pre><code class=\"cs\">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,   \/*  9 (.) *\/   CharType.None|   CharType.Comment|   CharType.Comment|   CharType.Whitespace|   CharType.Text|   CharType.SpecialWhitespace,   \/*  A (.) *\/   CharType.None|   CharType.Comment|   CharType.Comment|   CharType.Whitespace|   CharType.Text|   CharType.SpecialWhitespace,   \/*  B (.) *\/   CharType.None,   \/*  C (.) *\/   CharType.None,   \/*  D (.) *\/                          CharType.None|   CharType.Comment|   CharType.Comment|   CharType.Whitespace,   \/*  E (.) *\/   CharType.None,   .... };<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f PVS-Studio<\/b>:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.viva64.com\/ru\/w\/v3001\/\">V3001<\/a> There are identical sub-expressions &#8216;CharType.Comment&#8217; to the left and to the right of the &#8216;|&#8217; operator. XmlUTF8TextReader.cs 56<\/li>\n<li><a href=\"https:\/\/www.viva64.com\/ru\/w\/v3001\/\">V3001<\/a> There are identical sub-expressions &#8216;CharType.Comment&#8217; to the left and to the right of the &#8216;|&#8217; operator. XmlUTF8TextReader.cs 58<\/li>\n<li><a href=\"https:\/\/www.viva64.com\/ru\/w\/v3001\/\">V3001<\/a> There are identical sub-expressions &#8216;CharType.Comment&#8217; to the left and to the right of the &#8216;|&#8217; operator. XmlUTF8TextReader.cs 64<\/li>\n<\/ul>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0441\u0447\u0451\u043b \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <i>CharType.Comment| CharType.Comment<\/i>. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a <i>(CharType.Comment | CharType.Comment) == CharType.Comment<\/i>. \u041f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <i>CharType.Comment<\/i>, \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435\u0442.<\/p>\n<p>  <b>Issue 19<\/b><\/p>\n<p>  \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 <i>XmlBinaryWriterSession.TryAdd<\/i> \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 \u0438 \u043d\u0430 docs.microsoft.com \u2014 &#171;<a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/system.xml.xmlbinarywritersession.tryadd?view=netcore-3.0\">XmlBinaryWriterSession.TryAdd(XmlDictionaryString, Int32) Method<\/a>&#171;: <i>Returns: true if the string could be added; otherwise, false.<\/i><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0432 \u0442\u0435\u043b\u043e \u043c\u0435\u0442\u043e\u0434\u0430:  <\/p>\n<pre><code class=\"cs\">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)     {       \/\/ If the key is already set, then something is wrong       throw System.Runtime                   .Serialization                   .DiagnosticUtility                   .ExceptionUtility                   .ThrowHelperError(                     new InvalidOperationException(                           SR.XmlKeyAlreadyExists));     }      key = Add(value.Value);     keys[value.Key] = (key + 1);     return true;   }    key = Add(value.Value);   keys = AddKeys(value.Dictionary, value.Key + 1);   keys[value.Key] = (key + 1);   return true; }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3009\/\">V3009<\/a> It&#8217;s odd that this method always returns one and the same value of &#8216;true&#8217;. XmlBinaryWriterSession.cs 29<\/p>\n<p>  \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u043c, \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434 \u043b\u0438\u0431\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <i>true<\/i>, \u043b\u0438\u0431\u043e \u043a\u0438\u0434\u0430\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>false<\/i> \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0438\u043a\u043e\u0433\u0434\u0430.<\/p>\n<p>  <b>Issue 20<\/b><\/p>\n<p>  \u0412\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u0441\u044f \u043a\u043e\u0434 \u0441 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439, \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442 \u2014 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>false<\/i>:  <\/p>\n<pre><code class=\"cs\">internal virtual bool OnHandleReference(....) {     if (xmlWriter.depth &lt; depthToCheckCyclicReference)         return false;     if (canContainCyclicReference)     {         if (_byValObjectsInScope.Contains(obj))             throw ....;         _byValObjectsInScope.Push(obj);     }     return false; }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3009\/\">V3009<\/a> It&#8217;s odd that this method always returns one and the same value of &#8216;false&#8217;. XmlObjectSerializerWriteContext.cs 415<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u043c\u044b \u0441 \u0432\u0430\u043c\u0438 \u0443\u0436\u0435 \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043b\u0438 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c! \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0435\u0440\u0435\u0440\u044b\u0432 \u2014 \u0440\u0430\u0437\u043c\u044f\u0442\u044c \u043c\u044b\u0448\u0446\u044b, \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0445\u043e\u0434\u0438\u0442\u044c, \u0434\u0430\u0442\u044c \u043e\u0442\u0434\u043e\u0445\u043d\u0443\u0442\u044c \u0433\u043b\u0430\u0437\u0430\u043c, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u043e\u043a\u043d\u043e\u2026<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/008\/d6a\/92d\/008d6a92d6f4cf4066e744e4c857b47d.png\" alt=\"Picture 21\"><\/div>\n<p>  \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u043d\u0430 \u044d\u0442\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u0432\u044b \u0432\u043d\u043e\u0432\u044c \u043f\u043e\u043b\u043d\u044b \u0441\u0438\u043b, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043c. \ud83d\ude42<\/p>\n<p>  <b>Issue 21<\/b><\/p>\n<p>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <i>System.Security.Cryptography.Algorithms<\/i>.  <\/p>\n<pre><code class=\"cs\">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 &lt; rgbT.Length;)     {       \/\/  Increment counter -- up to 2^32 * sizeof(Hash)       Helpers.ConvertIntToByteArray(counter++, rgbCounter);       hasher.TransformBlock(rgbSeed, 0, rgbSeed.Length, rgbSeed, 0);       hasher.TransformFinalBlock(rgbCounter, 0, 4);       byte[] hash = hasher.Hash;       hasher.Initialize();       Buffer.BlockCopy(hash, 0, rgbT, ib,                         Math.Min(rgbT.Length - ib, hash.Length));        ib += hasher.Hash.Length;     }     return rgbT;   } }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3080\/\">V3080<\/a> Possible null dereference. Consider inspecting &#8216;hasher&#8217;. PKCS1MaskGenerationMethod.cs 37<\/p>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0435\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <i>hasher.TransformBlock <\/i> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <i>hasher <\/i> \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c <i>null<\/i>, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 <i>NullReferenceException<\/i>. \u041f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043c\u0435\u0436\u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u043e\u043c\u0443 \u0430\u043d\u0430\u043b\u0438\u0437\u0443.<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u043c\u043e\u0436\u0435\u0442 \u043b\u0438 <i>hasher<\/i> \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null<\/i>, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u0432 \u043c\u0435\u0442\u043e\u0434 <i>CreateFromName<\/i>.  <\/p>\n<pre><code class=\"cs\">public static object CreateFromName(string name) {   return CreateFromName(name, null); }<\/code><\/pre>\n<p>  \u041f\u043e\u043a\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u2014 \u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u0441\u044f \u0433\u043b\u0443\u0431\u0436\u0435. \u0422\u0435\u043b\u043e \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 <i>CreateFromName<\/i> \u0441 \u0434\u0432\u0443\u043c\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0432\u043e\u0436\u0443 \u0441\u043e\u043a\u0440\u0430\u0449\u0451\u043d\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e.  <\/p>\n<pre><code class=\"cs\">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; }<\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0447\u0435\u043a \u0432\u044b\u0445\u043e\u0434\u0430, \u0433\u0434\u0435 \u044f\u0432\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null<\/i>. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0445\u043e\u0442\u044f \u0431\u044b \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0432 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c\u043e\u043c \u0440\u0430\u043d\u0435\u0435 \u043c\u0435\u0442\u043e\u0434\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b\u043e \u0432\u044b\u0434\u0430\u043d\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 <i>NullReferenceException<\/i>.<\/p>\n<p>  \u0422\u0435\u043e\u0440\u0438\u044f \u2014 \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0449\u0451 \u0440\u0430\u0437 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0438 \u043e\u0442\u043c\u0435\u0442\u0438\u043c \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0442\u043e\u0447\u043a\u0438. \u041d\u0435\u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u0430 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043c.  <\/p>\n<pre><code class=\"cs\">public class PKCS1MaskGenerationMethod : .... \/\/ &lt;= 1 {   ....   public PKCS1MaskGenerationMethod() \/\/ &lt;= 2   {     _hashNameValue = DefaultHash;   }   ....   public override byte[] GenerateMask(byte[] rgbSeed, int cbReturn) \/\/ &lt;= 3   {     using (HashAlgorithm hasher        = (HashAlgorithm)CryptoConfig.CreateFromName(_hashNameValue)) \/\/ &lt;= 4     {         byte[] rgbCounter = new byte[4];         byte[] rgbT = new byte[cbReturn]; \/\/ &lt;= 5          uint counter = 0;         for (int ib = 0; ib &lt; rgbT.Length;) \/\/ &lt;= 6         {             ....             Helpers.ConvertIntToByteArray(counter++, rgbCounter); \/\/ &lt;= 7             hasher.TransformBlock(rgbSeed, 0, rgbSeed.Length, rgbSeed, 0);             ....         }         ....     }   } }<\/code><\/pre>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u0447\u0443\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435:<\/p>\n<p>  <b>1, 3<\/b>. \u041a\u043b\u0430\u0441\u0441 \u0438 \u043c\u0435\u0442\u043e\u0434 \u0438\u043c\u0435\u044e\u0442 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u0430 <i>public<\/i>. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u044d\u0442\u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u2014 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443.<\/p>\n<p>  <b>2<\/b>. \u041a\u043b\u0430\u0441\u0441 \u2014 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043d\u044b\u0439 \u043d\u0435\u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439, \u0438\u043c\u0435\u0435\u0442 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u2014 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043b\u0435\u0433\u043a\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0438 \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0445 \u043c\u043d\u043e\u0439 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043a\u043b\u0430\u0441\u0441\u044b \u0431\u044b\u043b\u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u043c\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u043b\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0435\u0449\u0451 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0438\u0441\u043a\u0430\u0442\u044c \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u0432 \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0438\u0445 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>  <b>4<\/b>. <i>CreateFromName<\/i> \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u0435\u0440\u043d\u0443\u0442\u044c <i>null<\/i> \u2014 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430, \u043a \u043d\u0435\u0439 \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043f\u043e\u0437\u0436\u0435. <\/p>\n<p>  <b>5, 6<\/b>. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>cbReturn<\/i> \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c &gt; 0 (\u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0434\u043b\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430). \u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f <i>cbReturn &gt; 0<\/i> \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044f <i>ib &lt; rgbT.Length<\/i> \u0438 \u0437\u0430\u0445\u043e\u0434\u0430 \u0432 \u0442\u0435\u043b\u043e \u0446\u0438\u043a\u043b\u0430.<\/p>\n<p>  <b>7<\/b>. <i>Helpres.ConvertIntToByteArray<\/i> \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u0435\u0437 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p>  \u0414\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0443\u0441\u043b\u043e\u0432\u0438\u0439, \u0437\u0430\u0432\u0438\u0441\u044f\u0449\u0438\u0445 \u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u044b\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<ul>\n<li><i>rgbCeed<\/i> \u2014 new byte[] { 0, 1, 2, 3 };<\/li>\n<li><i>cbReturn<\/i> \u2014 42.<\/li>\n<\/ul>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u00ab\u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u00bb \u043c\u0435\u0442\u043e\u0434 <i>CryptoConfig.CreateFromName<\/i>, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f <i>_hashNameValue<\/i>. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e \u0434\u043b\u044f \u043d\u0430\u0441, \u043e\u043d\u0430 \u0435\u0441\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e-\u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 \u044d\u0442\u0438\u043c \u043f\u043e\u043b\u0435\u043c:  <\/p>\n<pre><code class=\"cs\">public string HashName {   get { return _hashNameValue; }   set { _hashNameValue = value ?? DefaultHash; } }<\/code><\/pre>\n<p>  \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0432 &#8216;\u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435&#8217; \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f <i>HashName<\/i> (\u0442\u043e\u0447\u043d\u0435\u0435 \u2014 <i>_hashNameValue<\/i>), \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null <\/i> \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u0430 <i>CreateFromName <\/i> \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u0438\u0437 \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0445 \u043d\u0430\u043c\u0438 \u0442\u043e\u0447\u0435\u043a \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430. \u0412\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u043d\u0435 \u0431\u0443\u0434\u0443 (\u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0432\u044b \u043c\u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u0438\u0442\u0435 \u044d\u0442\u043e), \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u0438\u043d\u043d\u044b\u0439.<\/p>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 <i>NullReferenceException<\/i>, \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<pre><code class=\"cs\">PKCS1MaskGenerationMethod tempObj = new PKCS1MaskGenerationMethod(); tempObj.HashName = \"Dummy\"; tempObj.GenerateMask(new byte[] { 1, 2, 3 }, 42);<\/code><\/pre>\n<p>  \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/2ab\/384\/8e5\/2ab3848e542172cd92a7e03f55bba9fe.png\" alt=\"Picture 10\"><\/div>\n<p>  \u0420\u0430\u0434\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0436\u0435 \u043a\u043e\u0434 \u043d\u0430 NuGet \u043f\u0430\u043a\u0435\u0442\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 4.3.1.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/7b4\/a94\/766\/7b4a947666444496ca077e7530415c76.png\" alt=\"Picture 14\"><\/div>\n<p>  \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u0445, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u0430, \u043d\u0430 docs.microsoft.com \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u043d\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u2014 &#171;<a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/system.security.cryptography.pkcs1maskgenerationmethod.generatemask?view=netcore-3.0\">PKCS1MaskGenerationMethod.GenerateMask(Byte[], Int32) Method<\/a>&#171;.<\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u0443\u0436\u0435 \u0432 \u0445\u043e\u0434\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0430\u0448\u0451\u043b \u0435\u0449\u0451 2 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u00ab\u0441\u043b\u043e\u043c\u0430\u0442\u044c\u00bb \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434:<\/p>\n<ul>\n<li>\u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 <i>cbReturn<\/i> \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435;<\/li>\n<li>\u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 <i>rgbSeed<\/i> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null<\/i>.<\/li>\n<\/ul>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <i>OutOfMemoryException<\/i>.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/c50\/474\/7f9\/c504747f9a771843da10a128866811dd.png\" alt=\"Picture 15\"><\/div>\n<p>  \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <i>NullReferenceException<\/i> \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <i>rgbSeed.Length<\/i>. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b <i>hasher<\/i> \u0438\u043c\u0435\u043b \u043d\u0435\u043d\u0443\u043b\u0435\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0438\u043d\u0430\u0447\u0435 \u043f\u043e\u0442\u043e\u043a \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0435 \u0434\u043e\u0439\u0434\u0451\u0442 \u0434\u043e <i>rgbSeed.Length<\/i>.<\/p>\n<p>  <b>Issue 22<\/b><\/p>\n<p>  \u0412\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u0430\u0441\u044c \u0435\u0449\u0451 \u043f\u0430\u0440\u0430 \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u043c\u0435\u0441\u0442.  <\/p>\n<pre><code class=\"cs\">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); \/\/ &lt;=     return item;   }    public virtual AsymmetricSignatureFormatter CreateFormatter(     AsymmetricAlgorithm key)   {     AsymmetricSignatureFormatter item = (AsymmetricSignatureFormatter)       CryptoConfig.CreateFromName(FormatterAlgorithm);     item.SetKey(key); \/\/ &lt;=     return item;   }    .... }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f PVS-Studio<\/b>:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.viva64.com\/ru\/w\/v3080\/\">V3080<\/a> Possible null dereference. Consider inspecting &#8216;item&#8217;. SignatureDescription.cs 31<\/li>\n<li><a href=\"https:\/\/www.viva64.com\/ru\/w\/v3080\/\">V3080<\/a> Possible null dereference. Consider inspecting &#8216;item&#8217;. SignatureDescription.cs 38<\/li>\n<\/ul>\n<p>  \u041e\u043f\u044f\u0442\u044c \u0436\u0435, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <i>FormatterAlgorithm<\/i> \u0438 <i>DeformatterAlgorithm<\/i> \u0442\u0430\u043a\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u0435\u0442\u043e\u0434 <i>CryptoConfig.CreateFromName<\/i> \u0432\u0435\u0440\u043d\u0451\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null<\/i> \u0432 \u043c\u0435\u0442\u043e\u0434\u0430\u0445 <i>CreateDeformatter<\/i> \u0438 <i>CreateFormatter<\/i>. \u0414\u0430\u043b\u0435\u0435, \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 <i>SetKey<\/i> \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 <i>NullReferenceException<\/i>. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043e\u043f\u044f\u0442\u044c \u0436\u0435, \u043b\u0435\u0433\u043a\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435:  <\/p>\n<pre><code class=\"cs\">SignatureDescription signature = new SignatureDescription() {     DeformatterAlgorithm = \"Dummy\",     FormatterAlgorithm = \"Dummy\" };  signature.CreateDeformatter(null); \/\/ NRE signature.CreateFormatter(null);   \/\/ NRE<\/code><\/pre>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438 \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 <i>CreateDeformatter<\/i>, \u0438 \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 <i>CreateFormatter <\/i> \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <i>NullReferenceException<\/i>.<\/p>\n<p>  <b>Issue 23<\/b><\/p>\n<p>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430 \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <i>System.Private.Xml<\/i>.  <\/p>\n<pre><code class=\"cs\">public override void WriteBase64(byte[] buffer, int index, int count) {   if (!_inAttr &amp;&amp; (_inCDataSection || StartCDataSection()))     _wrapped.WriteBase64(buffer, index, count);   else     _wrapped.WriteBase64(buffer, index, count); }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3004\/\">V3004<\/a> The &#8216;then&#8217; statement is equivalent to the &#8216;else&#8217; statement. QueryOutputWriterV1.cs 242<\/p>\n<p>  \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u0447\u0442\u043e <i>then<\/i> \u0438 <i>else<\/i> \u0432\u0435\u0442\u0432\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <i>if<\/i> \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043a\u043e\u0434. \u041b\u0438\u0431\u043e \u0437\u0434\u0435\u0441\u044c \u043e\u0448\u0438\u0431\u043a\u0430, \u0438 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0432\u0435\u0442\u0432\u0435\u0439 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u043e\u0441\u044c \u0438\u043d\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u043b\u0438\u0431\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <i>if<\/i> \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c.<\/p>\n<p>  <b>Issue 24<\/b>  <\/p>\n<pre><code class=\"cs\">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))   {     ....   }   .... }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3003\/\">V3003<\/a> The use of &#8216;if (A) {&#8230;} else if (A) {&#8230;}&#8217; pattern was detected. There is a probability of logical error presence. Check lines: 381, 396. ImportContext.cs 381<\/p>\n<p>  \u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 <i>if-else-if <\/i> \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u2014 <i>content is XmlSchemaSimpleTypeRestriction<\/i>. \u0427\u0442\u043e \u0435\u0449\u0451 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u2014 \u0442\u0435\u043b\u0430 <i>then<\/i>-\u0432\u0435\u0442\u0432\u0435\u0439 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0440\u0430\u0437\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u0422\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435, \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u043b\u0438\u0431\u043e \u0442\u0435\u043b\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 <i>then<\/i>-\u0432\u0435\u0442\u0432\u0438 (\u0435\u0441\u043b\u0438 \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438\u0441\u0442\u0438\u043d\u043d\u043e), \u043b\u0438\u0431\u043e \u043d\u0438 \u0442\u043e, \u043d\u0438 \u0434\u0440\u0443\u0433\u043e\u0435, \u0435\u0441\u043b\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043b\u043e\u0436\u043d\u043e.<\/p>\n<p>  <b>Issue 25<\/b><\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u0431\u044b\u043b\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0435, \u043f\u0440\u0438\u0432\u043e\u0436\u0443 \u0435\u0433\u043e \u0442\u0435\u043b\u043e \u0446\u0435\u043b\u0438\u043a\u043e\u043c.  <\/p>\n<pre><code class=\"cs\">public bool MatchesXmlType(IList&lt;XPathItem&gt; 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 &lt;= typBase.Cardinality))     return false;    typBase = typBase.Prime;   for (int i = 0; i &lt; seq.Count; i++)   {     if (!CreateXmlType(seq[0]).IsSubtypeOf(typBase))       return false;   }    return true; }<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u2014 \u043f\u0440\u0438\u043c\u0438\u0442\u0435 \u043f\u043e\u0437\u0434\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f! <br \/>  \u0415\u0441\u043b\u0438 \u043d\u0435\u0442 \u2014 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio \u043f\u043e\u043c\u043e\u0436\u0435\u0442: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3102\/\">V3102<\/a> Suspicious access to element of &#8216;seq&#8217; object by a constant index inside a loop. XmlQueryRuntime.cs 738<\/p>\n<p>  \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0446\u0438\u043a\u043b <i>for<\/i>, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0432\u044b\u0445\u043e\u0434\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 <i>i &lt; seq.Count<\/i>. \u041d\u0430\u0432\u043e\u0434\u0438\u0442 \u043d\u0430 \u043c\u044b\u0441\u043b\u0438 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0445\u043e\u0442\u044f\u0442 \u043e\u0431\u043e\u0439\u0442\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c <i>seq<\/i>. \u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0446\u0438\u043a\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 (<i>seq[i]<\/i>), \u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0433\u043e \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0430 \u2014 \u043d\u0443\u043b\u044f (<i>seq[0]<\/i>).<\/p>\n<p>  <b>Issue 26<\/b><\/p>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u0443\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u043a\u043e\u0434\u0430, \u043d\u043e \u043e\u0442 \u0442\u043e\u0433\u043e \u043e\u043d\u0430 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430.  <\/p>\n<pre><code class=\"cs\">public override void WriteValue(string value) {   WriteValue(value); }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3110\/\">V3110<\/a> Possible infinite recursion inside &#8216;WriteValue&#8217; method. XmlAttributeCache.cs 166<\/p>\n<p>  \u041c\u0435\u0442\u043e\u0434 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0430\u043c \u0441\u0435\u0431\u044f, \u043e\u0431\u0440\u0430\u0437\u0443\u044f \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e \u0431\u0435\u0437 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0432\u044b\u0445\u043e\u0434\u0430 \u0438\u0437 \u043d\u0435\u0451.<\/p>\n<p>  <b>Issue 27<\/b>  <\/p>\n<pre><code class=\"cs\">public IList&lt;XPathNavigator&gt; DocOrderDistinct(IList&lt;XPathNavigator&gt; seq) {   if (seq.Count &lt;= 1)     return seq;    XmlQueryNodeSequence nodeSeq = (XmlQueryNodeSequence)seq;   if (nodeSeq == null)     nodeSeq = new XmlQueryNodeSequence(seq);    return nodeSeq.DocOrderDistinct(_docOrderCmp); }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3095\/\">V3095<\/a> The &#8216;seq&#8217; object was used before it was verified against null. Check lines: 880, 884. XmlQueryRuntime.cs 880<\/p>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u043c\u0435\u0442\u043e\u0434\u0443 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0439\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null<\/i>, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443 <i>Count<\/i> \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <i>NullReferenceException<\/i>. \u041d\u0438\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <i>nodeSeq<\/i>, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u044f\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u044f <i>seq<\/i>, \u043d\u043e \u0437\u0430\u0447\u0435\u043c \u043e\u043d\u0430 \u0442\u0430\u043c \u2014 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u043e. \u0415\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>seq<\/i> \u2014 <i>null<\/i>, \u043f\u043e\u0442\u043e\u043a \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0435 \u0434\u043e\u0439\u0434\u0451\u0442 \u0434\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438\u0437-\u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>seq<\/i> \u2014 \u043d\u0435 <i>null<\/i>, \u0442\u043e:<\/p>\n<ul>\n<li>\u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <i>InvalidCastException<\/i>, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0443\u0434\u0430\u0441\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435;<\/li>\n<li>\u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0439\u0434\u0451\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e, <i>nodeSeq<\/i> \u0442\u043e\u0447\u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 \u043e\u0442 <i>null<\/i>.<\/li>\n<\/ul>\n<p>  <b>Issue 28<\/b><\/p>\n<p>  \u0412\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u043e\u0441\u044c 4 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u044b\u043b\u0438 \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043e\u043d\u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0434\u043b\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438, \u043d\u043e \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u043a\u0430\u0441\u0430\u0435\u043c\u043e \u044d\u0442\u0438\u0445 \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u044f \u043d\u0435 \u043d\u0430\u0448\u0451\u043b.<\/p>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f PVS-Studio<\/b>:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.viva64.com\/ru\/w\/v3117\/\">V3117<\/a> Constructor parameter &#8216;securityUrl&#8217; is not used. XmlSecureResolver.cs 15<\/li>\n<li><a href=\"https:\/\/www.viva64.com\/ru\/w\/v3117\/\">V3117<\/a> Constructor parameter &#8216;strdata&#8217; is not used. XmlEntity.cs 18<\/li>\n<li><a href=\"https:\/\/www.viva64.com\/ru\/w\/v3117\/\">V3117<\/a> Constructor parameter &#8216;location&#8217; is not used. Compilation.cs 58<\/li>\n<li><a href=\"https:\/\/www.viva64.com\/ru\/w\/v3117\/\">V3117<\/a> Constructor parameter &#8216;access&#8217; is not used. XmlSerializationILGen.cs 38<\/li>\n<\/ul>\n<p>  \u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u043d\u044f \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b \u043f\u0435\u0440\u0432\u044b\u0439 (\u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e \u044f \u0432\u044b\u043f\u0438\u0441\u0430\u043b \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u044c\u0438). \u0427\u0435\u043c? \u041d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c.  <\/p>\n<pre><code class=\"cs\">public XmlSecureResolver(XmlResolver resolver, string securityUrl) {   _resolver = resolver; }<\/code><\/pre>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u0440\u0430\u0434\u0438 \u0437\u0430\u0448\u0451\u043b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u043f\u0438\u0448\u0443\u0442 \u043d\u0430 docs.microsoft.com \u2014 &#171;<a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/system.xml.xmlsecureresolver.-ctor?view=netcore-3.0\">XmlSecureResolver Constructors<\/a>&#187; \u043f\u0440\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <i>securityUrl<\/i>:<\/p>\n<p>  <i>The URL used to create the PermissionSet that will be applied to the underlying XmlResolver. The XmlSecureResolver calls PermitOnly() on the created PermissionSet before calling GetEntity(Uri, String, Type) on the underlying XmlResolver.<\/i><\/p>\n<p>  <b>Issue 29<\/b><\/p>\n<p>  \u0412 \u043f\u0430\u043a\u0435\u0442\u0435 <i>System.Private.Uri<\/i> \u044f \u043d\u0430\u0448\u0451\u043b \u043c\u0435\u0442\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0441\u0442\u0443\u043f\u0430\u043b \u0432 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0440\u0435\u0447\u0438\u0435 \u0441 \u0433\u0430\u0439\u0434\u043b\u0430\u0439\u043d\u0430\u043c\u0438 Microsoft \u043f\u043e \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044e \u043c\u0435\u0442\u043e\u0434\u0430 <i>ToString<\/i>. \u0412\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u043e\u0432\u0435\u0442\u043e\u0432 \u0441\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b &#171;<a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/system.object.tostring?view=netcore-3.0\">Object.ToString Method<\/a>&#171;: <b><i>Your ToString() override should not throw an exception<\/i><\/b><i>.<\/i><\/p>\n<p>  \u0421\u0430\u043c \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<pre><code class=\"cs\">public override string ToString() {   if (_username.Length == 0 &amp;&amp; _password.Length &gt; 0)   {     throw new UriFormatException(SR.net_uri_BadUserPassword);   }   .... }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3108\/\">V3108<\/a> It is not recommended to throw exceptions from &#8216;ToSting()&#8217; method. UriBuilder.cs 406<\/p>\n<p>  \u041a\u043e\u0434, \u0437\u0430\u0434\u0430\u0432\u0448\u0438\u0439 \u0447\u0435\u0440\u0435\u0437 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <i>UserName<\/i> \u0438 <i>Password<\/i> \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u043b\u044f \u043f\u043e\u043b\u044f <i>_username<\/i> \u0438 \u043d\u0435\u043f\u0443\u0441\u0442\u0443\u044e \u0434\u043b\u044f \u043f\u043e\u043b\u044f <i>_password<\/i> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0437\u0432\u0430\u0432\u0448\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 <i>ToString<\/i>, \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u041f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a\u043e\u0433\u043e \u043a\u043e\u0434\u0430:  <\/p>\n<pre><code class=\"cs\">UriBuilder uriBuilder = new UriBuilder() {   UserName = String.Empty,   Password = \"Dummy\" };  String stringRepresentation = uriBuilder.ToString(); Console.WriteLine(stringRepresentation);<\/code><\/pre>\n<p>  \u041d\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u044e\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u043a\u0430\u043a \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043a \u043c\u0435\u0442\u043e\u0434\u0443, \u0442\u0430\u043a \u0438 \u043d\u0430 docs.microsoft.com \u2014 &#171;<a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/system.uribuilder.tostring?view=netcore-3.0\">UriBuilder.ToString Method<\/a>&#171;.<\/p>\n<p>  <b>Issue 30<\/b><\/p>\n<p>  \u0412\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f, \u0432\u044b\u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043a\u043e\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <i>System.Data.Common<\/i>.  <\/p>\n<pre><code class=\"cs\">private ArrayList _tables; private DataTable GetTable(string tableName, string ns) {   ....   if (_tables.Count == 0)     return (DataTable)_tables[0];   .... }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3106\/\">V3106<\/a> Possibly index is out of bound. The &#8216;0&#8217; index is pointing beyond &#8216;_tables&#8217; bound. XMLDiffLoader.cs 277<\/p>\n<p>  \u042d\u0442\u043e\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u043e? \u041a\u0430\u043a \u0432\u044b \u0434\u0443\u043c\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u044d\u0442\u043e? \u041d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <i>ArgumentOutOfRangeException<\/i>? \u0422\u0430\u043a\u043e\u043c\u0443 \u043f\u043e\u0434\u0445\u043e\u0434\u0443 \u044f \u0431\u044b, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u043d\u0435 \u0443\u0434\u0438\u0432\u0438\u043b\u0441\u044f. \u0412 \u043e\u0431\u0449\u0435\u043c, \u043a\u043e\u0434 \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u0438 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439.<\/p>\n<p>  <b>Issue 31<\/b>  <\/p>\n<pre><code class=\"cs\">internal XmlNodeOrder ComparePosition(XPathNodePointer other) {   RealFoliate();   other.RealFoliate();   Debug.Assert(other != null);   .... }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3095\/\">V3095<\/a> The &#8216;other&#8217; object was used before it was verified against null. Check lines: 1095, 1096. XPathNodePointer.cs 1095<\/p>\n<p>  \u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 <i>other != null <\/i> \u043a\u0430\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u043c\u0435\u0442\u043e\u0434\u0430 <i>Debug.Assert <\/i> \u043d\u0435\u0434\u0432\u0443\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e \u043d\u0430\u043c\u0435\u043a\u0430\u0435\u0442, \u0447\u0442\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u043c\u0435\u0442\u043e\u0434\u0443 <i>ComparePosition <\/i> \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null<\/i>. \u041f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u0442\u0430\u043a\u0438\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u0445\u043e\u0442\u044f\u0442 \u043e\u0442\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c. \u041d\u043e \u0432 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0432\u044b\u0448\u0435 \u0443 <i>other<\/i> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <i>RealFoliate<\/i>. \u0412 \u0438\u0442\u043e\u0433\u0435, \u0435\u0441\u043b\u0438 <i>other<\/i> \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null<\/i>, \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <i>NullReferenceException<\/i> \u0434\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 <i>Assert<\/i>.<\/p>\n<p>  <b>Issue 32<\/b>  <\/p>\n<pre><code class=\"cs\">private PropertyDescriptorCollection GetProperties(Attribute[] attributes) {   ....   foreach (Attribute attribute in attributes)   {     Attribute attr = property.Attributes[attribute.GetType()];     if (   (attr == null &amp;&amp; !attribute.IsDefaultAttribute())          || !attr.Match(attribute))     {       match = false;       break;     }   }   .... }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3080\/\">V3080<\/a> Possible null dereference. Consider inspecting &#8216;attr&#8217;. DbConnectionStringBuilder.cs 534<\/p>\n<p>  \u0423\u0441\u043b\u043e\u0432\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <i>if <\/i> \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e. <i>Match<\/i> \u2014 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434. \u0421\u0443\u0434\u044f \u043f\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 <i>attr == null<\/i>, <i>null<\/i> \u2014 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0435 (\u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0435) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0435\u0441\u043b\u0438 \u043f\u043e\u0442\u043e\u043a \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u043e\u0439\u0434\u0451\u0442 \u0434\u043e \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 || \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e <i>attr<\/i> \u2014 <i>null<\/i>, \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <i>NullReferenceException<\/i>. <\/p>\n<p>  \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435:<\/p>\n<ol>\n<li>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435<i> attr <\/i> \u2014 <i>null<\/i>. \u0412\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u043d\u0434 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 &amp;&amp;.<\/li>\n<li>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>!attribute.IsDefaultAttribute()<\/i> \u2014 <i>false<\/i>. \u041e\u0431\u0449\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c &amp;&amp; \u2014 <i>false<\/i>.<\/li>\n<li>\u0422\u0430\u043a \u043a\u0430\u043a \u043b\u0435\u0432\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u043d\u0434 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 || \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>false<\/i>, \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u043d\u0434.<\/li>\n<li>\u0422\u0430\u043a \u043a\u0430\u043a <i>attr<\/i> \u2014 <i>null<\/i>, \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 <i>Match<\/i> \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435.<\/li>\n<\/ol>\n<p>  <b>Issue 33<\/b>  <\/p>\n<pre><code class=\"cs\">private int ReadOldRowData(   DataSet ds, ref DataTable table, ref int pos, XmlReader row) {   ....   if (table == null)   {     row.Skip(); \/\/ need to skip this element if we dont know about it,                  \/\/ before returning -1     return -1;   }   ....    if (table == null)     throw ExceptionBuilder.DiffgramMissingTable(             XmlConvert.DecodeName(row.LocalName));   .... }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3021\/\">V3021<\/a> There are two &#8216;if&#8217; statements with identical conditional expressions. The first &#8216;if&#8217; statement contains method return. This means that the second &#8216;if&#8217; statement is senseless XMLDiffLoader.cs 301<\/p>\n<p>  \u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <i>if<\/i>, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u2014 <i>table == null<\/i>. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c then-\u0432\u0435\u0442\u0432\u0438 \u044d\u0442\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u2014 \u0432 \u043e\u0434\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0445\u043e\u0434 \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u0430 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c -1, \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u2014 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u041c\u0435\u0436\u0434\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <i>table<\/i> \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u043e\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<p>  <b>Issue 34<\/b><\/p>\n<p>  \u0412\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <i>System.ComponentModel.TypeConverter<\/i>. \u0422\u043e\u0447\u043d\u0435\u0435, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0435\u0433\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439: <\/p>\n<p>  <i>Removes the last character from the formatted string. (Remove last character in virtual string). On exit the out param contains the position where the operation was actually performed. This position is relative to the test string. The MaskedTextResultHint out param gives more information about the operation result. Returns <\/i> <b><i>true <\/i><\/b> <i>on success,<\/i><b><i> false <\/i><\/b> <i>otherwise.<\/i><\/p>\n<p>  \u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e: \u0435\u0441\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u043c\u0435\u0442\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <i>true<\/i>, \u0438\u043d\u0430\u0447\u0435 \u2014 <i>false<\/i>. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0444\u0430\u043a\u0442\u0443.  <\/p>\n<pre><code class=\"cs\">public bool Remove(out int testPosition, out MaskedTextResultHint resultHint) {   ....   if (lastAssignedPos == INVALID_INDEX)   {     ....     return true; \/\/ nothing to remove.   }   ....   return true; }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3009\/\">V3009<\/a> It&#8217;s odd that this method always returns one and the same value of &#8216;true&#8217;. MaskedTextProvider.cs 1529<\/p>\n<p>  \u041f\u043e \u0444\u0430\u043a\u0442\u0443 \u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 \u2014 <i>true<\/i>.<\/p>\n<p>  <b>Issue 35<\/b>  <\/p>\n<pre><code class=\"cs\">public void Clear() {   if (_table != null)   {     ....   }    if (_table.fInitInProgress &amp;&amp; _delayLoadingConstraints != null)   {     ....   }   .... }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3125\/\">V3125<\/a> The &#8216;_table&#8217; object was used after it was verified against null. Check lines: 437, 423. ConstraintCollection.cs 437<\/p>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 <i>_table != null<\/i> \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u0441\u0430\u043c\u0430 \u0437\u0430 \u0441\u0435\u0431\u044f \u2014 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <i>_table<\/i> \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null<\/i>. \u041f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043d\u0430 \u044d\u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0438\u0436\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u043a \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043d\u043e\u043c\u0443 \u043f\u043e\u043b\u044e \u0447\u0435\u0440\u0435\u0437 <i>_table<\/i> \u0443\u0436\u0435 \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 <i>null<\/i> \u2014 <i>_table .fInitInProgress<\/i>.<\/p>\n<p>  <b>Issue 36<\/b><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439, \u0432\u044b\u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043a\u043e\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <i>System.Runtime.Serialization.Formatters<\/i>.  <\/p>\n<pre><code class=\"cs\">private void Write(....) {   ....   if (memberNameInfo != null)   {     ....     _serWriter.WriteObjectEnd(memberNameInfo, typeNameInfo);     }     else if ((objectInfo._objectId == _topId) &amp;&amp; (_topName != null))     {       _serWriter.WriteObjectEnd(topNameInfo, typeNameInfo);       ....     }     else if (!ReferenceEquals(objectInfo._objectType, Converter.s_typeofString))     {       _serWriter.WriteObjectEnd(typeNameInfo, typeNameInfo);     } }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3038\/\">V3038<\/a> The argument was passed to method several times. It is possible that other argument should be passed instead. BinaryObjectWriter.cs 262<\/p>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0441\u043c\u0443\u0442\u0438\u043b \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0432\u044b\u0437\u043e\u0432 <i>_serWriter.WriteObjectEnd<\/i> \u0441 \u0434\u0432\u0443\u043c\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u2014 <i>typeNameInfo<\/i>. \u0412\u0440\u043e\u0434\u0435 \u0431\u044b \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0443, \u043d\u043e \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f. \u0420\u0435\u0448\u0438\u043b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <i>WriteObjectEnd<\/i>.  <\/p>\n<pre><code class=\"cs\">internal void WriteObjectEnd(NameInfo memberNameInfo, NameInfo typeNameInfo)  { }<\/code><\/pre>\n<p>  \u0427\u0442\u043e \u0436\u2026 \u0418\u0434\u0451\u043c \u0434\u0430\u043b\u044c\u0448\u0435. \ud83d\ude42<\/p>\n<p>  <b>Issue 37<\/b>  <\/p>\n<pre><code class=\"cs\">internal void WriteSerializationHeader(   int topId,   int headerId,   int minorVersion,   int majorVersion) {   var record = new SerializationHeaderRecord(                      BinaryHeaderEnum.SerializedStreamHeader,                      topId,                      headerId,                      minorVersion,                      majorVersion);   record.Write(this); }<\/code><\/pre>\n<p>  \u0413\u043b\u044f\u0434\u044f \u043d\u0430 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434, \u0441\u0445\u043e\u0434\u0443 \u0438 \u043d\u0435 \u0441\u043a\u0430\u0436\u0435\u0448\u044c, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0442\u0430\u043a \u0438\u043b\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e. \u0410 \u0432\u043e\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0435\u0433\u043e \u043d\u0430\u0441\u0442\u043e\u0440\u043e\u0436\u0438\u043b\u043e.<\/p>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3066\/\">V3066<\/a> Possible incorrect order of arguments passed to &#8216;SerializationHeaderRecord&#8217; constructor: &#8216;minorVersion&#8217; and &#8216;majorVersion&#8217;. BinaryFormatterWriter.cs 111<\/p>\n<p>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 <i>SerializationHeaderRecord<\/i>.  <\/p>\n<pre><code class=\"cs\">internal SerializationHeaderRecord(   BinaryHeaderEnum binaryHeaderEnum,   int topId,   int headerId,   int majorVersion,   int minorVersion) {   _binaryHeaderEnum = binaryHeaderEnum;   _topId = topId;   _headerId = headerId;   _majorVersion = majorVersion;   _minorVersion = minorVersion; }<\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 <i>majorVersion<\/i>, <i>minorVersion<\/i>; \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0436\u0435 \u043e\u043d\u0438 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 <i>minorVersion<\/i>, <i>majorVersion<\/i>. \u041f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0443. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0442\u0430\u043a \u0438 \u0431\u044b\u043b\u043e \u0437\u0430\u0434\u0443\u043c\u0430\u043d\u043e (\u0430 \u0432\u0434\u0440\u0443\u0433?) \u2014 \u0434\u0443\u043c\u0430\u044e, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u043e \u0431\u044b \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u044f\u0441\u043d\u044f\u044e\u0449\u0438\u0439 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439.<\/p>\n<p>  <b>Issue 38<\/b>  <\/p>\n<pre><code class=\"cs\">internal ObjectManager(   ISurrogateSelector selector,    StreamingContext context,    bool checkSecurity,    bool isCrossAppDomain) {   _objects = new ObjectHolder[DefaultInitialSize];   _selector = selector;   _context = context;   _isCrossAppDomain = isCrossAppDomain; }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3117\/\">V3117<\/a> Constructor parameter &#8216;checkSecurity&#8217; is not used. ObjectManager.cs 33<\/p>\n<p>  \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 <i>checkSecurity<\/i> \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. \u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u043a \u043d\u0435\u043c\u0443 \u043d\u0435\u0442. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0443, \u0447\u0442\u043e \u043e\u043d \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0434\u043b\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438, \u043d\u043e \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435, \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043e\u0432 \u043f\u0440\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0433\u043e\u0434\u044b \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0441\u044f \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e.<\/p>\n<p>  <b>Issue 39<\/b><\/p>\n<p>  \u0412\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u0441\u044f \u0435\u0449\u0451 \u043a\u043e\u0434, \u043f\u043e\u043a\u0430\u0437\u0430\u0432\u0448\u0438\u0439\u0441\u044f \u043c\u043d\u0435 \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u043c. \u041f\u0430\u0442\u0442\u0435\u0440\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 1 \u0432 1 \u0432\u043e \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043c\u0435\u0442\u043e\u0434\u0430\u0445 \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 \u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e:<\/p>\n<ul>\n<li>\u043b\u0438\u0431\u043e \u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0432\u0435\u0442\u043b\u0451\u043d \u0438 \u043d\u0435 \u043f\u043e\u043d\u044f\u043b \u0441\u043c\u044b\u0441\u043b\u0430 \u0442\u0430\u043a\u043e\u0433\u043e \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f;<\/li>\n<li>\u043b\u0438\u0431\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u043b\u0430\u0441\u044c \u043f\u043e \u043a\u043e\u0434\u0443 \u043c\u0435\u0442\u043e\u0434\u043e\u043c copy-paste.<\/li>\n<\/ul>\n<p>  \u0421\u0430\u043c \u043a\u043e\u0434:  <\/p>\n<pre><code class=\"cs\">private void EnlargeArray() {   int newLength = _values.Length * 2;   if (newLength &lt; 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; }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f PVS-Studio<\/b>:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.viva64.com\/ru\/w\/v3022\/\">V3022<\/a> Expression &#8216;newLength == int.MaxValue&#8217; is always false. ObjectManager.cs 1423<\/li>\n<li><a href=\"https:\/\/www.viva64.com\/ru\/w\/v3022\/\">V3022<\/a> Expression &#8216;newLength == int.MaxValue&#8217; is always false. ObjectManager.cs 1511<\/li>\n<li><a href=\"https:\/\/www.viva64.com\/ru\/w\/v3022\/\">V3022<\/a> Expression &#8216;newLength == int.MaxValue&#8217; is always false. ObjectManager.cs 1558<\/li>\n<\/ul>\n<p>  \u0412\u0441\u0451, \u0447\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u0430\u0445 \u2014 \u0442\u0438\u043f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 <i>temp<\/i> (\u043d\u0435 <i>FixupHolder<\/i>, \u0430 <i>long<\/i> \u0438\u043b\u0438 <i>object<\/i>). \u0422\u0430\u043a \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0443 \u043c\u0435\u043d\u044f \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u043d\u0438\u044f \u043d\u0430 copy-paste\u2026<\/p>\n<p>  <b>Issue 40<\/b><\/p>\n<p>  \u041a\u043e\u0434 \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <i>System.Data.Odbc<\/i>.  <\/p>\n<pre><code class=\"cs\">public string UnquoteIdentifier(....) {   ....   if (!string.IsNullOrEmpty(quotePrefix) || quotePrefix != \" \")   { .... }   .... }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3022\/\">V3022<\/a> Expression &#8216;!string.IsNullOrEmpty(quotePrefix) || quotePrefix != &#187; &#171;&#8216; is always true. OdbcCommandBuilder.cs 338<\/p>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0441\u0447\u0438\u0442\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>true<\/i>. \u0418 \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0430\u043a. \u041f\u0440\u0438\u0447\u0451\u043c \u043d\u0435\u0432\u0430\u0436\u043d\u043e, \u043a\u0430\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 <i>quotePrefix<\/i> \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u2014 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0441\u0430\u043c\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>  \u0418\u043c\u0435\u0435\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 ||, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 <i>true<\/i>, \u0435\u0441\u043b\u0438 \u043b\u0435\u0432\u044b\u0439 \u0438\u043b\u0438 \u043f\u0440\u0430\u0432\u044b\u0439 (\u0438\u043b\u0438 \u043e\u0431\u0430) \u043e\u043f\u0435\u0440\u0430\u043d\u0434 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>true<\/i>. \u0421 \u043b\u0435\u0432\u044b\u043c \u0432\u0441\u0451 \u043f\u043e\u043d\u044f\u0442\u043d\u043e. \u041f\u0440\u0430\u0432\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u043d\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043b\u0435\u0432\u044b\u0439 \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>false<\/i>. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0442\u0430\u043a, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 <i>true<\/i>, \u043a\u043e\u0433\u0434\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043b\u0435\u0432\u043e\u0433\u043e \u2014 <i>false<\/i>, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u0441\u0435\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e <i>true<\/i>.<\/p>\n<p>  \u0418\u0437 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435 \u043a\u043e\u0434\u0430 \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u043d\u0434, \u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <i>string.IsNullOrEmpty(quotePrefix)<\/i> \u2014 <i>true<\/i>, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0432\u0435\u0440\u043d\u043e \u043e\u0434\u043d\u043e \u0438\u0437 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0439:<\/p>\n<ul>\n<li><i>quotePrefix == null<\/i>;<\/li>\n<li><i>quotePrefix.Length == 0<\/i>.<\/li>\n<\/ul>\n<p>  \u041f\u0440\u0438 \u0438\u0441\u0442\u0438\u043d\u043d\u043e\u0441\u0442\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0438\u0437 \u044d\u0442\u0438\u0445 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0439 \u0442\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u0442\u0438\u043d\u043d\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 <i>quotePrefix != &#187; &#171;<\/i>, \u0447\u0442\u043e \u043c\u044b \u0438 \u0445\u043e\u0442\u0435\u043b\u0438 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u2014 <i>true<\/i>, \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e <i>quotePrefix<\/i>.<\/p>\n<p>  <b>Issue 41<\/b><\/p>\n<p>  \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f\u0441\u044c \u043a \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0443 \u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430\u0445 \u0441 \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438:  <\/p>\n<pre><code class=\"cs\">private sealed class PendingGetConnection {   public PendingGetConnection(            long dueTime,            DbConnection owner,            TaskCompletionSource&lt;DbConnectionInternal&gt; completion,            DbConnectionOptions userOptions)     {         DueTime = dueTime;         Owner = owner;         Completion = completion;     }     public long DueTime { get; private set; }     public DbConnection Owner { get; private set; }     public TaskCompletionSource&lt;DbConnectionInternal&gt;               Completion { get; private set; }     public DbConnectionOptions UserOptions { get; private set; } }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3117\/\">V3117<\/a> Constructor parameter &#8216;userOptions&#8217; is not used. DbConnectionPool.cs 26<\/p>\n<p>  \u0418\u0437 \u043a\u043e\u0434\u0430 \u0438 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u2014 <i>userOptions<\/i>, \u043f\u0440\u0438 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u0440\u0443\u0433\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0438\u043c\u0451\u043d\u043d\u044b\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432. \u041e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0435, \u0447\u0442\u043e \u043e\u0434\u043d\u043e \u0438\u0437 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0431\u044b\u043b\u0438.<\/p>\n<p>  <b>Issue 42<\/b><\/p>\n<p>  \u0415\u0441\u0442\u044c \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u0441\u044f \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 2 \u0440\u0430\u0437\u0430. \u041f\u0430\u0442\u0442\u0435\u0440\u043d \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439.  <\/p>\n<pre><code class=\"cs\">private DataTable ExecuteCommand(....) {   ....   foreach (DataRow row in schemaTable.Rows)   {     resultTable.Columns                .Add(row[\"ColumnName\"] as string,                     (Type)row[\"DataType\"] as Type);   }   .... }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f PVS-Studio<\/b>: <\/p>\n<ul>\n<li><a href=\"https:\/\/www.viva64.com\/ru\/w\/v3051\/\">V3051<\/a> An excessive type cast. The object is already of the &#8216;Type&#8217; type. DbMetaDataFactory.cs 176<\/li>\n<li><a href=\"https:\/\/www.viva64.com\/ru\/w\/v3051\/\">V3051<\/a> An excessive type cast. The object is already of the &#8216;Type&#8217; type. OdbcMetaDataFactory.cs 1109<\/li>\n<\/ul>\n<p>  \u041f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 <i>(Type)row[\u00abDataType\u00bb] as Type<\/i>. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u044f\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u0437\u0430\u0442\u0435\u043c \u2014 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <i>as<\/i>. \u0415\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>row[\u00abDataType\u00bb]<\/i> \u2014 <i>null<\/i>, \u043e\u043d\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e &#8216;\u043f\u0440\u043e\u0439\u0434\u0451\u0442&#8217; \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u0439\u0434\u0451\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u043c\u0435\u0442\u043e\u0434\u0443 <i>Add<\/i>. \u0415\u0441\u043b\u0438 <i>row[\u00abDataType\u00bb]<\/i> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435 \u0443\u0434\u0430\u0441\u0442\u0441\u044f \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0442\u0438\u043f\u0443 <i>Type<\/i>, \u0443\u0436\u0435 \u043f\u0440\u0438 \u044f\u0432\u043d\u043e\u043c \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <i>InvalidCastException<\/i>. \u0412 \u0438\u0442\u043e\u0433\u0435, \u0437\u0430\u0447\u0435\u043c \u0437\u0434\u0435\u0441\u044c \u0434\u0432\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u044f? \u0412\u043e\u043f\u0440\u043e\u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439.<\/p>\n<p>  <b>Issue 43<\/b><\/p>\n<p>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0438\u0437 <i>System.Runtime.InteropServices.RuntimeInformation<\/i>.  <\/p>\n<pre><code class=\"cs\">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&lt;                              AssemblyInformationalVersionAttribute&gt;()                          ?.InformationalVersion;         ....         int plusIndex = versionString.IndexOf('+');         ....       }       ....     }     ....   } }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3105\/\">V3105<\/a> The &#8216;versionString&#8217; variable was used after it was assigned through null-conditional operator. NullReferenceException is possible. RuntimeInformation.cs 29<\/p>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0435\u0442 \u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u043c \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 <i>NullReferenceException<\/i> \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 <i>IndexOf<\/i> \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <i>versionString<\/i>. \u041f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0430\u0432\u0442\u043e\u0440\u044b \u043a\u043e\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 &#8216;?.&#8217;, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f <i>NullReferenceException<\/i> \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443 <i>InfromationalVersion<\/i>. \u0428\u0443\u0442\u043a\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u044b\u0437\u043e\u0432 <i>GetCustomAttribute&lt;&#8230;&gt;<\/i> \u0432\u0435\u0440\u043d\u0451\u0442 <i>null<\/i>, \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e, \u043d\u043e \u043d\u0438\u0436\u0435 \u2014 \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 <i>IndexOf<\/i>, \u0442\u0430\u043a \u043a\u0430\u043a <i>versionString<\/i> \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null<\/i>.<\/p>\n<p>  <b>Issue 44<\/b><\/p>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u043c\u0441\u044f \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 <i>System.ComponentModel.Composition <\/i> \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439. \u0421\u0440\u0430\u0437\u0443 2 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u044b\u043b\u043e \u0432\u044b\u0434\u0430\u043d\u043e \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:  <\/p>\n<pre><code class=\"cs\">public static bool CanSpecialize(....) {   ....    object[] genericParameterConstraints = ....;   GenericParameterAttributes[] genericParameterAttributes = ....;    \/\/ if no constraints and attributes been specifed, anything can be created   if ((genericParameterConstraints == null) &amp;&amp;        (genericParameterAttributes == null))   {     return true;   }    if ((genericParameterConstraints != null) &amp;&amp;        (genericParameterConstraints.Length != partArity))   {     return false;   }    if ((genericParameterAttributes != null) &amp;&amp;        (genericParameterAttributes.Length != partArity))   {     return false;   }    for (int i = 0; i &lt; partArity; i++)   {     if (!GenericServices.CanSpecialize(         specialization[i],         (genericParameterConstraints[i] as Type[]).           CreateTypeSpecializations(specialization),         genericParameterAttributes[i]))     {       return false;     }   }    return true; }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f PVS-Studio<\/b>:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.viva64.com\/ru\/w\/v3125\/\">V3125<\/a> The &#8216;genericParameterConstraints&#8217; object was used after it was verified against null. Check lines: 603, 589. GenericSpecializationPartCreationInfo.cs 603<\/li>\n<li><a href=\"https:\/\/www.viva64.com\/ru\/w\/v3125\/\">V3125<\/a> The &#8216;genericParameterAttributes&#8217; object was used after it was verified against null. Check lines: 604, 594. GenericSpecializationPartCreationInfo.cs 604<\/li>\n<\/ul>\n<p>  \u0412 \u043a\u043e\u0434\u0435 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 <i>genericParameterAttributes != null<\/i> \u0438 <i>genericParameterConstraints != null<\/i>. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, <i>null<\/i> \u2014 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c. \u0415\u0441\u043b\u0438 \u043e\u0431\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u043c\u0435\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null<\/i>, \u0432\u044b\u0445\u043e\u0434\u0438\u043c \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u0430 \u2014 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0435\u0442. \u0410 \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u043a\u0430\u043a\u0430\u044f-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 <i>null<\/i>, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0451\u043d \u0432\u044b\u0445\u043e\u0434 \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u0430? \u0415\u0441\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0434\u043e\u0439\u0434\u0451\u0442 \u0434\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0430 \u043f\u043e \u0446\u0438\u043a\u043b\u0443, \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <i>NullReferenceException<\/i>.<\/p>\n<p>  <b>Issue 45<\/b><\/p>\n<p>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0449\u0451 \u043d\u0430 \u043e\u0434\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0436\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0410 \u0445\u043e\u0442\u044f, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043c \u0438\u043d\u0430\u0447\u0435 \u2014 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u044f\u0442\u044c \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u043c, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043a\u043e\u0434. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u043e\u0434\u043d\u043e\u0438\u043c\u0451\u043d\u043d\u044b\u0439 NuGet \u043f\u0430\u043a\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 prerelease \u0432\u0435\u0440\u0441\u0438\u0438 (\u044f \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u043f\u0430\u043a\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 4.6.0-preview6.19303.8). \u041d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u043a\u043e\u0434, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a\u043e\u0439:  <\/p>\n<pre><code class=\"cs\">LazyMemberInfo lazyMemberInfo = new LazyMemberInfo(); var eq = lazyMemberInfo.Equals(null); Console.WriteLine(eq);<\/code><\/pre>\n<p>  \u041c\u0435\u0442\u043e\u0434 <i>Equals<\/i> \u043d\u0435 \u043f\u0440\u043e\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d, \u043d\u0430 docs.microsoft.com \u044f \u043d\u0435 \u043d\u0430\u0448\u0451\u043b \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u043b\u044f .NET Core, \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f .NET Framework. \u0415\u0441\u043b\u0438 \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u043d\u0430 \u043d\u0435\u0433\u043e (&#171;<a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/system.componentmodel.composition.reflectionmodel.lazymemberinfo.equals?view=netframework-4.8&amp;amp;viewFallbackFrom=netcore-3.0#System_ComponentModel_Composition_ReflectionModel_LazyMemberInfo_Equals_System_Object_\">LazyMemberInfo.Equals(Object) Method<\/a>&#171;) \u2014 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u043d\u0435 \u0432\u0438\u0434\u043d\u043e \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <i>true<\/i> \u0438\u043b\u0438 <i>false<\/i>, \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u0445 \u043d\u0435\u0442. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043a\u043e\u0434 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0438 \u0432\u0438\u0434\u0438\u043c:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/8e5\/8f7\/aa4\/8e58f7aa4e5a274751cde57da4d9497f.png\" alt=\"Picture 16\"><\/div>\n<p>  \u041c\u043e\u0436\u0435\u043c \u0447\u0443\u0442\u044c \u0438\u0437\u0432\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f, \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u0438 \u0442\u043e\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434:  <\/p>\n<pre><code class=\"cs\">LazyMemberInfo lazyMemberInfo = new LazyMemberInfo(); var eq = lazyMemberInfo.Equals(typeof(String)); Console.WriteLine(eq);<\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/e74\/199\/292\/e74199292d39b2df8a7b205218c9c1fe.png\" alt=\"Picture 17\"><\/div>\n<p>  \u0427\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043e\u0431\u0430 \u044d\u0442\u0438\u0445 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u043c \u0438 \u0442\u043e\u043c \u0436\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438. \u0417\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0436\u0435 \u0432\u043d\u0443\u0442\u0440\u044c \u043c\u0435\u0442\u043e\u0434\u0430 <i>Equals<\/i>.  <\/p>\n<pre><code class=\"cs\">public override bool Equals(object obj) {   LazyMemberInfo that = (LazyMemberInfo)obj;    \/\/ Difefrent member types mean different members   if (_memberType != that._memberType)   {     return false;   }    \/\/ if any of the lazy memebers create accessors in a delay-loaded fashion,    \/\/ we simply compare the creators   if ((_accessorsCreator != null) || (that._accessorsCreator != null))   {     return object.Equals(_accessorsCreator, that._accessorsCreator);   }    \/\/ we are dealing with explicitly passed accessors in both cases   if(_accessors == null || that._accessors == null)   {     throw new Exception(SR.Diagnostic_InternalExceptionMessage);   }   return _accessors.SequenceEqual(that._accessors); }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3115\/\">V3115<\/a> Passing &#8216;null&#8217; to &#8216;Equals&#8217; method should not result in &#8216;NullReferenceException&#8217;. LazyMemberInfo.cs 116<\/p>\n<p>  \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0437\u0434\u0435\u0441\u044c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u0430\u043b \u043c\u0430\u0445\u0443, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u044b\u0434\u0430\u043b \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 <i>that._memberType<\/i>. \u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u043e\u0434\u043d\u0430\u043a\u043e, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u0432\u044b\u0448\u0435 \u2014 \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <i>(LazyMemberInfo)obj<\/i>. \u0423\u0436\u0435 \u0432\u0437\u044f\u0442\u043e \u043d\u0430 \u0437\u0430\u043c\u0435\u0442\u043a\u0443.<\/p>\n<p>  \u0421 <i>InvalidCastException<\/i>, \u0434\u0443\u043c\u0430\u044e, \u0432\u0441\u0451 \u043f\u043e\u043d\u044f\u0442\u043d\u043e. \u041f\u043e\u0447\u0435\u043c\u0443 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f <i>NullReferenceException<\/i>? \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e <i>LazyMemberInfo<\/i> \u2014 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0430. \u0410 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <i>null<\/i> \u043a\u0430\u043a \u0440\u0430\u0437 \u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 <i>NullReferenceException<\/i>. \u041d\u0443 \u0430 \u0435\u0449\u0451 \u0437\u0434\u0435\u0441\u044c \u043f\u0430\u0440\u0430 \u043e\u043f\u0435\u0447\u0430\u0442\u043e\u043a \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u2014 \u0442\u043e\u0436\u0435 \u0437\u0430\u043e\u0434\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c. \u041d\u0443 \u0438 \u044f\u0432\u043d\u043e\u0435 \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u043e\u0436\u0435 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043d\u0430 \u0441\u043e\u0432\u0435\u0441\u0442\u0438 \u0430\u0432\u0442\u043e\u0440\u043e\u0432.<\/p>\n<p>  <b>Issue 46<\/b><\/p>\n<p>  \u0427\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435, \u043a\u0441\u0442\u0430\u0442\u0438, \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u043e\u0441\u044c \u0432 <i>System.Drawing.Common<\/i>, \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 <i>TriState<\/i>.  <\/p>\n<pre><code class=\"cs\">public override bool Equals(object o) {   TriState state = (TriState)o;   return _value == state._value; }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3115\/\">V3115<\/a> Passing &#8216;null&#8217; to &#8216;Equals&#8217; method should not result in &#8216;NullReferenceException&#8217;. TriState.cs 53<\/p>\n<p>  \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0442\u0430\u043a\u0438\u0435 \u0436\u0435, \u043a\u0430\u043a \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c \u0432\u044b\u0448\u0435 \u0441\u043b\u0443\u0447\u0430\u0435.<\/p>\n<p>  <b>Issue 47<\/b><\/p>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u0437 <i>System.Text.Json<\/i>. <\/p>\n<p>  \u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e <i>ToString<\/i> \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c <i>null<\/i>? \u0417\u0430\u043a\u0440\u0435\u043f\u0438\u043c.  <\/p>\n<pre><code class=\"cs\">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:     {       \/\/ null parent should have hit the None case       Debug.Assert(_parent != null);       return _parent.GetRawValueAsString(_idx);     }     case JsonTokenType.String:       return GetString();     case JsonTokenType.Comment:     case JsonTokenType.EndArray:     case JsonTokenType.EndObject:     default:       Debug.Fail($\"No handler for {nameof(JsonTokenType)}.{TokenType}\");       return string.Empty;   } }<\/code><\/pre>\n<p>  \u041d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 <i>null<\/i> \u0438 \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442, \u043d\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435. <\/p>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3108\/\">V3108<\/a> It is not recommended to return &#8216;null&#8217; from &#8216;ToSting()&#8217; method. JsonElement.cs 1460<\/p>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0430 <i>GetString()<\/i>. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043d\u0435\u0433\u043e:  <\/p>\n<pre><code class=\"cs\">public string GetString() {   CheckValidInstance();    return _parent.GetString(_idx, JsonTokenType.String); }<\/code><\/pre>\n<p>  \u041f\u043e\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u0441\u044f \u0433\u043b\u0443\u0431\u0436\u0435 \u2014 \u0432 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043c\u0435\u0442\u043e\u0434\u0430 <i>GetString<\/i>:  <\/p>\n<pre><code class=\"cs\">internal string GetString(int index, JsonTokenType expectedType) {   ....    if (tokenType == JsonTokenType.Null)   {     return null;   }   .... }<\/code><\/pre>\n<p>  \u0418 \u0442\u0443\u0442 \u0443\u0436\u0435 \u0432\u0438\u0434\u0438\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u0435, \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null<\/i> \u2014 \u043a\u0430\u043a \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430, \u0442\u0430\u043a \u0438 \u0438\u0437 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e <i>ToString<\/i>.<\/p>\n<p>  <b>Issue 48<\/b><\/p>\n<p>  \u0415\u0449\u0451 \u043e\u0434\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e:  <\/p>\n<pre><code class=\"cs\">internal JsonPropertyInfo CreatePolymorphicProperty(....) {   JsonPropertyInfo runtimeProperty      = CreateProperty(property.DeclaredPropertyType,                       runtimePropertyType,                       property.ImplementedPropertyType,                       property?.PropertyInfo,                       Type,                       options);   property.CopyRuntimeSettingsTo(runtimeProperty);    return runtimeProperty; }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3042\/\">V3042<\/a> Possible NullReferenceException. The &#8216;?.&#8217; and &#8216;.&#8217; operators are used for accessing members of the &#8216;property&#8217; object JsonClassInfo.AddProperty.cs 179<\/p>\n<p>  \u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 <i>CreateProperty <\/i> \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043e\u0431\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <i>property<\/i>: <i>property.DeclaredPropertyType<\/i>, <i>property.ImplementedPropertyType<\/i>, <i>property?.PropertyInfo<\/i>. \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u0432 \u043e\u0434\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 &#8216;?.&#8217;. \u0415\u0441\u043b\u0438 \u043e\u043d \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u043b\u0438\u0448\u043d\u0438\u0439 \u0438 <i>property<\/i> \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null<\/i>, \u044d\u0442\u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0438\u0447\u0435\u043c \u043d\u0435 \u043f\u043e\u043c\u043e\u0436\u0435\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u0438 \u043f\u0440\u044f\u043c\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <i>NullReferenceException<\/i>.<\/p>\n<p>  <b>Issue 49<\/b><\/p>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430 \u0431\u044b\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 <i>System.Security.Cryptography.Xml<\/i> \u0438 \u0438\u0434\u0443\u0442 \u043e\u043d\u0438 \u043f\u0430\u0440\u043e\u0439, \u043a\u0430\u043a \u044d\u0442\u043e \u0443\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0431\u044b\u043b\u043e \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f\u043c\u0438. \u041a\u043e\u0434 \u043e\u043f\u044f\u0442\u044c \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 copy-paste, \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435 \u0441\u0430\u043c\u0438.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442:  <\/p>\n<pre><code class=\"cs\">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);     }   } }<\/code><\/pre>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442:  <\/p>\n<pre><code class=\"cs\">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);     }   } }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f PVS-Studio<\/b>:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.viva64.com\/ru\/w\/v3061\/\">V3061<\/a> Parameter &#8216;docPos&#8217; is always rewritten in method body before being used. CanonicalXmlDocument.cs 37<\/li>\n<li><a href=\"https:\/\/www.viva64.com\/ru\/w\/v3061\/\">V3061<\/a> Parameter &#8216;docPos&#8217; is always rewritten in method body before being used. CanonicalXmlDocument.cs 54<\/li>\n<\/ul>\n<p>  \u0412 \u043e\u0431\u043e\u0438\u0445 \u044d\u0442\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u0430\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <i>docPos<\/i> \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u043c\u0435\u0442\u043e\u0434\u0430, \u043f\u043e\u043f\u0440\u043e\u0441\u0442\u0443 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p>  <b>Issue 50<\/b><\/p>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439 \u043d\u0430 \u043a\u043e\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <i>System.Data.SqlClient<\/i>.  <\/p>\n<pre><code class=\"cs\">private bool IsBOMNeeded(MetaType type, object value) {   if (type.NullableType == TdsEnums.SQLXMLTYPE)   {     Type currentType = value.GetType();      if (currentType == typeof(SqlString))     {       if (!((SqlString)value).IsNull &amp;&amp; ((((SqlString)value).Value).Length &gt; 0))       {         if ((((SqlString)value).Value[0] &amp; 0xff) != 0xff)           return true;       }     }     else if ((currentType == typeof(string)) &amp;&amp; (((String)value).Length &gt; 0))     {       if ((value != null) &amp;&amp; (((string)value)[0] &amp; 0xff) != 0xff)         return true;     }     else if (currentType == typeof(SqlXml))     {       if (!((SqlXml)value).IsNull)         return true;     }     else if (currentType == typeof(XmlDataFeed))     {       return true;  \/\/ Values will eventually converted to unicode string here     }   }   return false; }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3095\/\">V3095<\/a> The &#8216;value&#8217; object was used before it was verified against null. Check lines: 8696, 8708. TdsParser.cs 8696<\/p>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0441\u043c\u0443\u0442\u0438\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 <i>value != null<\/i> \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0443\u0441\u043b\u043e\u0432\u0438\u0439. \u041f\u043e\u0445\u043e\u0436\u0435, \u0447\u0442\u043e \u043e\u043d\u0430 \u0437\u0430\u0442\u0435\u0440\u044f\u043b\u0430\u0441\u044c \u0442\u0430\u043c \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u044b\u0448\u0435 <i>value<\/i> \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u0436\u0435 <i>value<\/i> \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null<\/i> \u2014 \u0434\u0435\u043b\u0430 \u043e\u0431\u0441\u0442\u043e\u044f\u0442 \u043f\u043b\u043e\u0445\u043e.<\/p>\n<p>  <b>Issue 51<\/b><\/p>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u0438\u0437 \u0442\u0435\u0441\u0442\u043e\u0432, \u043d\u043e \u043c\u043d\u0435 \u043e\u043d\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439, \u0442\u0430\u043a \u0447\u0442\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0435\u0451.  <\/p>\n<pre><code class=\"cs\">protected virtual TDSMessageCollection CreateQueryResponse(....) {   ....   if (....)   {     ....   }   else if (   lowerBatchText.Contains(\"name\")            &amp;&amp; lowerBatchText.Contains(\"state\")            &amp;&amp; lowerBatchText.Contains(\"databases\")            &amp;&amp; lowerBatchText.Contains(\"db_name\"))     \/\/ SELECT [name], [state] FROM [sys].[databases] WHERE [name] = db_name()   {     \/\/ Delegate to current database response     responseMessage = _PrepareDatabaseResponse(session);   }   .... }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3053\/\">V3053<\/a> An excessive expression. Examine the substrings &#8216;name&#8217; and &#8216;db_name&#8217;. QueryEngine.cs 151<\/p>\n<p>  \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 <i>lowerBatchText.Contains(\u00abname\u00bb) <\/i> \u0438 <i>lowerBatchText.Contains(\u00abdb_name\u00bb) <\/i> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u043c. \u0412 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0443 <i>\u00abdb_name\u00bb<\/i>, \u0442\u043e \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0438 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0443 <i>\u00abname\u00bb<\/i>. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 <i>\u00abname\u00bb<\/i>, \u0442\u043e \u0438 <i>\u00abdb_name\u00bb<\/i> \u043e\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 <i>lowerBatchText.Contains(\u00abname\u00bb) <\/i> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0439. \u0420\u0430\u0437\u0432\u0435 \u0447\u0442\u043e \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 <i>\u00abname\u00bb<\/i>.<\/p>\n<p>  <b>Issue 52<\/b><\/p>\n<p>  \u041f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <i>System.Net.Requests<\/i>.  <\/p>\n<pre><code class=\"cs\">protected override PipelineInstruction PipelineCallback(   PipelineEntry entry, ResponseDescription response, ....) {   if (NetEventSource.IsEnabled)      NetEventSource.Info(this,        $\"Command:{entry?.Command} Description:{response?.StatusDescription}\");   \/\/ null response is not expected   if (response == null)     return PipelineInstruction.Abort;   ....   if (entry.Command == \"OPTS utf8 on\\r\\n\")     ....   .... }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3125\/\">V3125<\/a> The &#8216;entry&#8217; object was used after it was verified against null. Check lines: 270, 227. FtpControlStream.cs 270<\/p>\n<p>  \u041f\u0440\u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <i>entry?.Command<\/i> \u0438 <i>response?.Description<\/i>. \u0412\u043c\u0435\u0441\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 &#8216;.&#8217; \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 &#8216;?.&#8217;, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <i>NullReferenceException<\/i>, \u0435\u0441\u043b\u0438 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0438\u0437 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null<\/i>. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e\u0442 \u043f\u0440\u0438\u0451\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0414\u0430\u043b\u0435\u0435, \u043a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u043a\u043e\u0434\u0430, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435 <i>null<\/i> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f <i>response<\/i> \u043e\u0442\u0441\u0435\u043a\u0430\u044e\u0442 (\u0432\u044b\u0445\u043e\u0434 \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u0430, \u0435\u0441\u043b\u0438 <i>response == null<\/i>), \u0430 \u0432\u043e\u0442 \u0434\u043b\u044f <i>entry<\/i> \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u043d\u0435\u0442. \u0412 \u0438\u0442\u043e\u0433\u0435, \u0435\u0441\u043b\u0438 <i>entry<\/i> \u2014 <i>null<\/i>, \u043d\u0438\u0436\u0435, \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 <i>entry.Command<\/i> (\u0443\u0436\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c &#8216;.&#8217;, \u0430 \u043d\u0435 &#8216;?.&#8217;) \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u043c \u0432\u043d\u043e\u0432\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0440\u044b\u0432 \u2014 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0442\u0432\u043b\u0435\u0447\u044c\u0441\u044f, \u0437\u0430\u0432\u0430\u0440\u0438\u0442\u044c \u0447\u0430\u0439 \u0438\u043b\u0438 \u043f\u0440\u0438\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u043a\u043e\u0444\u0435, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0431\u0443\u0434\u0443 \u0440\u0430\u0434 \u0432\u0430\u0441 \u0441\u043d\u043e\u0432\u0430 \u0432\u0438\u0434\u0435\u0442\u044c \u0437\u0434\u0435\u0441\u044c.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/56a\/3fc\/f07\/56a3fcf075284f021a56249627e518bb.png\" alt=\"Picture 23\"><\/div>\n<p>  \u0412\u0435\u0440\u043d\u0443\u043b\u0438\u0441\u044c? \u0422\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043c. \ud83d\ude42<\/p>\n<p>  <b>Issue 53<\/b><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0447\u0442\u043e-\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <i>System.Collections.Immutable<\/i>. \u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0441\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 <i>System.Collections.Immutable.ImmutableArray&lt;T&gt;<\/i>. \u041d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442 \u043c\u0435\u0442\u043e\u0434\u044b <i>IStructuralEquatable.Equals<\/i> \u0438 <i>IStructuralComparable.CompareTo<\/i>.<\/p>\n<p>  \u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u043c\u0435\u0442\u043e\u0434\u0430 <i>IStructuralEquatable.Equals<\/i>. \u041a\u043e\u0434 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u043d\u0438\u0436\u0435, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0432 \u043d\u0451\u043c \u043d\u0435 \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cs\">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 &amp;&amp; otherArray == null)       {         return true;       }       else if (self.array == null)       {         return false;       }     }   }    IStructuralEquatable ours = self.array;   return ours.Equals(otherArray, comparer); }<\/code><\/pre>\n<p>  \u0423\u0434\u0430\u043b\u043e\u0441\u044c? \u0415\u0441\u043b\u0438 \u0434\u0430 \u2014 \u043e\u043f\u044f\u0442\u044c \u0436\u0435, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0439\u0442\u0435 \u043f\u043e\u0437\u0434\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \ud83d\ude42<\/p>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3125\/\">V3125<\/a> The &#8216;ours&#8217; object was used after it was verified against null. Check lines: 1212, 1204. ImmutableArray_1.cs 1212<\/p>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0441\u043c\u0443\u0442\u0438\u043b \u0432\u044b\u0437\u043e\u0432 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 <i>Equals<\/i> \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <i>ours<\/i>, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0439\u0441\u044f \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438 <i>return<\/i>, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 <i>NullReferenceException<\/i>. \u041a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u043d \u043f\u0440\u0438\u0448\u0451\u043b \u043a \u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044e? \u0427\u0442\u043e\u0431\u044b \u043b\u0435\u0433\u0447\u0435 \u0431\u044b\u043b\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c, \u043d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u043e\u0436\u0443 \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0436\u0435 \u043c\u0435\u0442\u043e\u0434\u0430.  <\/p>\n<pre><code class=\"cs\">bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer) {   ....   if (....)   {     ....     if (....)     {       ....       if (self.array == null &amp;&amp; otherArray == null)       {         ....       }       else if (self.array == null)       {         ....       }     }   }    IStructuralEquatable ours = self.array;   return ours.Equals(otherArray, comparer); }<\/code><\/pre>\n<p>  \u041f\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <i>ours<\/i> \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0438\u0437 <i>self.array<\/i>. \u0412\u044b\u0448\u0435 \u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 <i>self.array == null<\/i>. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, <i>self.array<\/i>, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0438 <i>ours<\/i>, \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null<\/i>. \u041f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u0432 \u0442\u0435\u043e\u0440\u0438\u0438. \u0414\u043e\u0441\u0442\u0438\u0436\u0438\u043c\u043e \u043b\u0438 \u0442\u0430\u043a\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0449\u0451 \u0440\u0430\u0437 \u043f\u0440\u0438\u0432\u043e\u0436\u0443 \u0442\u0435\u043b\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0441 \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c\u0438 \u0442\u043e\u0447\u043a\u0430\u043c\u0438.  <\/p>\n<pre><code class=\"cs\">bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer) {   var self = this; \/\/ &lt;= 1   Array otherArray = other as Array;   if (otherArray == null) \/\/ &lt;= 2   {     var theirs = other as IImmutableArray;     if (theirs != null) \/\/ &lt;= 3     {       otherArray = theirs.Array;        if (self.array == null &amp;&amp; otherArray == null)       {         return true;       }       else if (self.array == null) \/\/ &lt;= 4       {         return false;       }   }    IStructuralEquatable ours = self.array; \/\/ &lt;= 5   return ours.Equals(otherArray, comparer); }<\/code><\/pre>\n<p>  <b>\u041a\u043b\u044e\u0447\u0435\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0430 1<\/b>. <i>self.array == this.array<\/i> (\u0438\u0437-\u0437\u0430 <i>self = this<\/i>). \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f <i>this.array == null<\/i>.<\/p>\n<p>  <b>\u041a\u043b\u044e\u0447\u0435\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0430 2<\/b>. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 <i>if<\/i>, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u0438, \u0438\u043b\u0438 \u0436\u0435 \u043f\u043e\u0439\u0442\u0438 \u0432\u043d\u0443\u0442\u0440\u044c. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 <i>if<\/i>, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0442\u0438\u043f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <i>other<\/i> \u0431\u044b\u043b \u0442\u0438\u043f\u043e\u043c <i>Array<\/i> \u0438\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u043c \u043e\u0442 \u043d\u0435\u0433\u043e \u0438 <i>other<\/i> \u043d\u0435 \u0438\u043c\u0435\u043b\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f<i> null<\/i>. \u0422\u043e\u0433\u0434\u0430 \u043f\u043e\u0441\u043b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <i>as<\/i> \u0432 <i>otherArray<\/i> \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0435\u043d\u0443\u043b\u0435\u0432\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430, \u0438 \u043c\u044b \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <i>if<\/i>.<\/p>\n<p>  <b>\u041a\u043b\u044e\u0447\u0435\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0430 3<\/b>. \u042d\u0442\u043e\u0442 \u043f\u0443\u043d\u043a\u0442 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043f\u0443\u0442\u044c. \u041d\u0430\u043c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0439\u0442\u0438 \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0435 <i>if<\/i> (\u0442\u043e\u0442, \u0447\u0442\u043e \u0441 \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c <i>theirs != null<\/i>). \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0438 \u043d\u0430\u0447\u043d\u0451\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 <i>then<\/i>-\u0432\u0435\u0442\u0432\u0438, \u043c\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u043d\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0435\u043c \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u043d\u0430\u043c \u043f\u0443\u043d\u043a\u0442\u0430 5 \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 <i>self.array == null<\/i> \u0437\u0430 \u0441\u0447\u0451\u0442 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 4. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u0439\u0442\u0438 \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <i>if<\/i> \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 3, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0443\u0441\u043b\u043e\u0432\u0438\u0439:<\/p>\n<ul>\n<li>\u0447\u0442\u043e\u0431\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>other<\/i> \u0431\u044b\u043b\u043e <i>null<\/i>;<\/li>\n<li>\u0447\u0442\u043e\u0431\u044b \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0442\u0438\u043f <i>other<\/i> \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u043b \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <i>IImmutableArray<\/i>.<\/li>\n<\/ul>\n<p>  <b>\u041a\u043b\u044e\u0447\u0435\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0430 5<\/b>. \u0415\u0441\u043b\u0438 \u043c\u044b \u0434\u043e\u0441\u0442\u0438\u0433\u043b\u0438 \u044d\u0442\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c <i>self.array == null<\/i>, \u0437\u043d\u0430\u0447\u0438\u0442, \u043c\u044b \u0434\u043e\u0431\u0438\u043b\u0438\u0441\u044c \u0441\u0432\u043e\u0435\u0439 \u0446\u0435\u043b\u0438, \u0438 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <i>NullReferenceException<\/i>.<\/p>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043d\u0430\u0431\u043e\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0443\u0442 \u043d\u0430\u0441 \u043a \u0446\u0435\u043b\u0438.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u043e\u0435: <i>this.array \u2014 null<\/i>.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0435 \u2014 \u043e\u0434\u043d\u043e \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445:<\/p>\n<ul>\n<li><i>other<\/i> \u2014 <i>null<\/i>;<\/li>\n<li><i>other<\/i> \u0438\u043c\u0435\u0435\u0442 \u0442\u0438\u043f <i>Array<\/i> \u0438\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0439 \u043e\u0442 \u043d\u0435\u0433\u043e;<\/li>\n<li><i>other<\/i> \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0442\u0438\u043f <i>Array<\/i> \u0438\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0439 \u043e\u0442 \u043d\u0435\u0433\u043e, \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <i>IImmutableArray<\/i>.<\/li>\n<\/ul>\n<p>  <i>array<\/i> \u2014 \u043f\u043e\u043b\u0435, \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<pre><code class=\"cs\">internal T[] array;<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a <i>ImmutableArray&lt;T&gt;<\/i> \u2014 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043e\u043d\u0430 \u0438\u043c\u0435\u0435\u0442 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e (\u0431\u0435\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432), \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u043e\u043b\u0435 <i>array<\/i> \u043f\u0440\u0438\u043c\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0442\u043e \u0435\u0441\u0442\u044c \u2014 <i>null<\/i>. \u0410 \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e.<\/p>\n<p>  \u041d\u0443 \u0438 \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u0435\u043c, \u0447\u0442\u043e \u043c\u044b \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u0438 \u044f\u0432\u043d\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0432\u0441\u0435 \u043a\u0430\u0440\u0442\u044b \u043d\u0430 \u0440\u0443\u043a\u0430\u0445, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u0440\u0435\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434, \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c, \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c.<\/p>\n<p>  <b>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 1<\/b>.  <\/p>\n<pre><code class=\"cs\">var comparer = EqualityComparer&lt;String&gt;.Default; ImmutableArray&lt;String&gt; immutableArray = new ImmutableArray&lt;string&gt;(); ((IStructuralEquatable)immutableArray).Equals(null, comparer);<\/code><\/pre>\n<p>  <b>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 2<\/b>.  <\/p>\n<pre><code class=\"cs\">var comparer = EqualityComparer&lt;String&gt;.Default; ImmutableArray&lt;String&gt; immutableArray = new ImmutableArray&lt;string&gt;(); ((IStructuralEquatable)immutableArray).Equals(new string[] { }, comparer);<\/code><\/pre>\n<p>  <b>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 3<\/b>.  <\/p>\n<pre><code class=\"cs\">var comparer = EqualityComparer&lt;String&gt;.Default; ImmutableArray&lt;String&gt; immutableArray = new ImmutableArray&lt;string&gt;(); ((IStructuralEquatable)immutableArray).Equals(typeof(Object), comparer);<\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u043d\u0438\u043c \u0438 \u0442\u0435\u043c \u0436\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0437\u0430 \u0441\u0447\u0451\u0442 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0443\u0442\u0435\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/13a\/a3b\/e8a\/13aa3be8a0b68a646aee130773f2c862.png\" alt=\"Picture 18\"><\/div>\n<p>  <b>Issue 54<\/b><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0437\u0430\u0431\u044b\u043b\u0438, \u0443 \u043d\u0430\u0441 \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043c\u0435\u0442\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0442\u044c\u0441\u044f \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \ud83d\ude42 \u0422\u043e\u043b\u044c\u043a\u043e \u0432 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0442\u0430\u043a \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u043c. \u0422\u0435\u043c \u0431\u043e\u043b\u0435\u0435, \u0447\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0430\u043c \u0443\u0436\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430.  <\/p>\n<pre><code class=\"cs\">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 &amp;&amp; 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); \/\/ &lt;=   }    throw new ArgumentException(SR.ArrayLengthsNotEqual, nameof(other)); }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3125\/\">V3125<\/a> The &#8216;ours&#8217; object was used after it was verified against null. Check lines: 1265, 1251. ImmutableArray_1.cs 1265<\/p>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u043d\u0435\u0435 \u043f\u0440\u0438\u043c\u0435\u0440. <\/p>\n<p>  \u041d\u0430\u043f\u0438\u0448\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:  <\/p>\n<pre><code class=\"cs\">Object other = ....; var comparer = Comparer&lt;String&gt;.Default; ImmutableArray&lt;String&gt; immutableArray = new ImmutableArray&lt;string&gt;(); ((IStructuralComparable)immutableArray).CompareTo(other, comparer);<\/code><\/pre>\n<p>  \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u0442\u043e\u0447\u043a\u0438, \u0433\u0434\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <i>NullReferenceException<\/i>.<\/p>\n<p>  <b>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/b>: <i>other<\/i> \u2014 <i>new String[]{ }<\/i>;<\/p>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/eef\/d77\/08a\/eefd7708a187f5060f2074e642f18434.png\" alt=\"Picture 22\"><\/div>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u0430\u043c \u043e\u043f\u044f\u0442\u044c \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>  <b>Issue 55<\/b><\/p>\n<p>  \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 <i>System.Net.HttpListener<\/i> \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u043e\u0441\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0441\u0442, \u043c\u0430\u043b\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445, \u0442\u0430\u043a \u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u0434\u0440\u0443\u0433 \u043d\u0430 \u0434\u0440\u0443\u0433\u0430. \u0418 \u0432\u043d\u043e\u0432\u044c \u0443 \u043c\u0435\u043d\u044f \u0437\u0430\u043a\u0440\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043c\u0443\u0442\u043d\u044b\u0435 \u0441\u043e\u043c\u043d\u0435\u043d\u0438\u044f \u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 copy-paste. \u0422\u0430\u043a \u043a\u0430\u043a \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0434\u0438\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430, \u0434\u043b\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430:  <\/p>\n<pre><code class=\"cs\">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));   }   .... }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3095\/\">V3095<\/a> The &#8216;buffer&#8217; object was used before it was verified against null. Check lines: 51, 53. HttpRequestStream.cs 51<\/p>\n<p>  \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 <i>ArgumentNullException <\/i> \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 <i>buffer == null <\/i> \u044f\u0432\u043d\u043e \u043d\u0430\u043c\u0435\u043a\u0430\u0435\u0442 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e <i>null<\/i> \u2014 \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439. \u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <i>NetEventSource.IsEnabled<\/i> \u2014 <i>true<\/i>, \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c <i>buffer<\/i> \u2014 <i>null<\/i>, \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <i>NullReferenceException <\/i> \u043f\u0440\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <i>buffer.Length<\/i>. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0434\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 <i>buffer == null <\/i> \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0435\u043b\u043e \u0434\u0430\u0436\u0435 \u043d\u0435 \u0434\u043e\u0439\u0434\u0451\u0442.<\/p>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f PVS-Studio, \u0432\u044b\u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0441 \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u043c:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.viva64.com\/ru\/w\/v3095\/\">V3095<\/a> The &#8216;buffer&#8217; object was used before it was verified against null. Check lines: 49, 51. HttpResponseStream.cs 49<\/li>\n<li><a href=\"https:\/\/www.viva64.com\/ru\/w\/v3095\/\">V3095<\/a> The &#8216;buffer&#8217; object was used before it was verified against null. Check lines: 74, 75. HttpResponseStream.cs 74<\/li>\n<\/ul>\n<p>  <b>Issue 56<\/b><\/p>\n<p>  \u041f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u0441\u044f \u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 <i>System.Transactions.Local<\/i>.  <\/p>\n<pre><code class=\"cs\">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);   }   .... }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3095\/\">V3095<\/a> The &#8216;tx&#8217; object was used before it was verified against null. Check lines: 3282, 3285. TransactionState.cs 3282<\/p>\n<p>  \u041f\u0440\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u0445\u043e\u0442\u044f\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <i>InvalidOperationException<\/i>. \u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <i>tx<\/i>, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0435\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442 \u043d\u0430 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e <i>null<\/i>, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <i>NullReferenceException<\/i> \u043f\u0440\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <i>tx.DistributedTxId<\/i>. \u0418\u0440\u043e\u043d\u0438\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 <i>tx<\/i> \u2014 <i>null<\/i> \u044d\u0442\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0435 \u043f\u043e\u043c\u043e\u0436\u0435\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <i>if<\/i> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043d\u044b\u043c \u043f\u043e\u043b\u044f\u043c \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <i>tx<\/i> \u2014 <i>tx._outcomeSource._isoLevel<\/i>.<\/p>\n<p>  <b>Issue 57<\/b><\/p>\n<p>  \u041a\u043e\u0434 \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <i>System.Runtime.Caching<\/i>.  <\/p>\n<pre><code class=\"cs\">internal void SetLimit(int cacheMemoryLimitMegabytes) {   long cacheMemoryLimit = cacheMemoryLimitMegabytes;   cacheMemoryLimit = cacheMemoryLimit &lt;&lt; MEGABYTE_SHIFT;    _memoryLimit = 0;    \/\/ never override what the user specifies as the limit;   \/\/ only call AutoPrivateBytesLimit when the user does not specify one.   if (cacheMemoryLimit == 0 &amp;&amp; _memoryLimit == 0)   {     \/\/ Zero means we impose a limit     _memoryLimit = EffectiveProcessMemoryLimit;   }   else if (cacheMemoryLimit != 0 &amp;&amp; _memoryLimit != 0)   {     \/\/ Take the min of \"cache memory limit\" and      \/\/ the host's \"process memory limit\".     _memoryLimit = Math.Min(_memoryLimit, cacheMemoryLimit);   }   else if (cacheMemoryLimit != 0)   {     \/\/ _memoryLimit is 0, but \"cache memory limit\"      \/\/ is non-zero, so use it as the limit     _memoryLimit = cacheMemoryLimit;   }   .... }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3022\/\">V3022<\/a> Expression &#8216;cacheMemoryLimit != 0 &amp;&amp; _memoryLimit != 0&#8217; is always false. CacheMemoryMonitor.cs 250<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043a\u043e\u0434, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043e\u0434\u043d\u043e \u0438\u0437 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u2014 <i>cacheMemoryLimit != 0 &amp;&amp; _memoryLimit != 0<\/i> \u2014 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>false<\/i>. \u0422\u0430\u043a \u043a\u0430\u043a <i>_memoryLimit<\/i> \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0 (\u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c <i>if<\/i>), \u043f\u0440\u0430\u0432\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u043d\u0434 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 &amp;&amp; \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>false<\/i>, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u0441\u0435\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u0436\u0435 <i>false<\/i>.<\/p>\n<p>  <b>Issue 58<\/b><\/p>\n<p>  \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u043e\u0436\u0443 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <i>System.Diagnostics.TraceSource<\/i>.  <\/p>\n<pre><code class=\"cs\">public override object Pop() {   StackNode n = _stack.Value;   if (n == null)   {     base.Pop();   }   _stack.Value = n.Prev;   return n.Value; }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3125\/\">V3125<\/a> The &#8216;n&#8217; object was used after it was verified against null. Check lines: 115, 111. CorrelationManager.cs 115<\/p>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043a\u043e\u0434. \u0418\u0437-\u0437\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 <i>n == null<\/i> \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0443, \u0447\u0442\u043e <i>null<\/i> \u2014 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u0442\u0430\u043a \u2014 \u043d\u0438\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <i>NullReferenceException<\/i> \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043a \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043d\u043e\u043c\u0443 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443 \u2014 <i>n.Prev<\/i>. \u0415\u0441\u043b\u0438 <i>n<\/i> \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c <i>null<\/i>, \u0442\u043e \u0432\u044b\u0437\u043e\u0432 <i>base.Pop()<\/i> \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d.<\/p>\n<p>  <b>Issue 59<\/b><\/p>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u043d\u0430\u0448\u043b\u0430\u0441\u044c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 <i>System.Drawing.Primitives<\/i>. \u0418 \u0432\u043d\u043e\u0432\u044c \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043d\u0430\u0439\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e. \u0412\u043e\u0442 \u043a\u043e\u0434:  <\/p>\n<pre><code class=\"cs\">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)     {       \/\/ special case due to mismatch between Html and enum spelling       colorString = \"LightGrey\";     }     else     {       colorString = c.Name;     }   }   else   {     colorString = \"#\" + c.R.ToString(\"X2\", null) +                         c.G.ToString(\"X2\", null) +                         c.B.ToString(\"X2\", null);   }    return colorString; }<\/code><\/pre>\n<p>  \u041b\u0430\u0434\u043d\u043e-\u043b\u0430\u0434\u043d\u043e, \u0441\u043d\u043e\u0432\u0430 \u044d\u0442\u0438 \u043c\u043e\u0438 \u0448\u0443\u0442\u043a\u0438\u2026 \u0418\u043b\u0438 \u0436\u0435 \u0432\u044b \u0441\u043c\u043e\u0433\u043b\u0438? \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043c \u043a\u043e\u0434, \u0447\u0442\u043e\u0431\u044b \u0431\u043e\u043b\u0435\u0435 \u044f\u0432\u043d\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443.<\/p>\n<p>  \u0412\u043e\u0442 \u0441\u043e\u043a\u0440\u0430\u0449\u0451\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043a\u043e\u0434\u0430:  <\/p>\n<pre><code class=\"cs\">switch (c.ToKnownColor()) {   ....   case KnownColor.Control:     colorString = \"buttonface\";     break;   case KnownColor.ControlLight:     colorString = \"buttonface\";     break;   .... }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3139\/\">V3139<\/a> Two or more case-branches perform the same actions. ColorTranslator.cs 302<\/p>\n<p>  \u041d\u0435 \u043c\u043e\u0433\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430, \u043d\u043e \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043e\u0448\u0438\u0431\u043a\u0430. \u0412 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u0434\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0445\u043e\u0442\u0435\u043b\u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e <i>case<\/i>, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0434\u0440\u0443\u0433 \u0437\u0430 \u0434\u0440\u0443\u0433\u043e\u043c. \u0410 \u043e\u0448\u0438\u0431\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u0438 copy-paste \u0437\u0434\u0435\u0441\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043b\u0435\u0433\u043a\u043e, \u043a\u0430\u043a \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f. <\/p>\n<p>  \u041a\u043e\u043f\u043d\u0451\u043c \u0435\u0449\u0451 \u0447\u0443\u0442\u044c \u0433\u043b\u0443\u0431\u0436\u0435. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 <i>ToHtml <\/i> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>\u00abbuttonface\u00bb<\/i>, \u043d\u0430 \u0432\u0445\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043e\u0434\u043d\u043e \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 (\u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e):<\/p>\n<ul>\n<li><i>SystemColors.Control<\/i>;<\/li>\n<li><i>SystemColors.ControlLight<\/i>.<\/li>\n<\/ul>\n<p>  \u0415\u0441\u043b\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u044d\u0442\u0438\u0445 \u0446\u0432\u0435\u0442\u043e\u0432 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f ARGB, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ul>\n<li><i>SystemColors.Control<\/i> \u2014 <i>(255, 240, 240, 240)<\/i>;<\/li>\n<li><i>SystemColors.ControlLight \u2014 (255, 227, 227, 227)<\/i>.<\/li>\n<\/ul>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e\u0437\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 (<i>\u00abbuttonface\u00bb<\/i>) \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u2014 <i>FromHtml<\/i>, \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0446\u0432\u0435\u0442 <i>Control (255, 240, 240, 240)<\/i>. \u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0437 <i>FromHtml<\/i> \u0446\u0432\u0435\u0442 <i>ControlLight<\/i>? \u0414\u0430. \u0412 \u044d\u0442\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0435 \u0435\u0441\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0446\u0432\u0435\u0442\u043e\u0432, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 (\u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435) \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0446\u0432\u0435\u0442. \u0412 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0435\u0441\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430:  <\/p>\n<pre><code class=\"cs\">s_htmlSysColorTable[\"threedhighlight\"]    = ColorUtil.FromKnownColor(KnownColor.ControlLight);<\/code><\/pre>\n<p>  \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, <i>FromHtml<\/i> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0446\u0432\u0435\u0442 <i>ControlLight (255, 227, 227, 227)<\/i> \u0434\u043b\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <i>\u00abthreedhighlight\u00bb<\/i>. \u042f \u0434\u0443\u043c\u0430\u044e, \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 <i>case KnownColor.ControlLight<\/i>.<\/p>\n<p>  <b>Issue 60<\/b><\/p>\n<p>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0430\u0440\u043e\u0447\u043a\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439 \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <i>System.Text.RegularExpressions<\/i>.  <\/p>\n<pre><code class=\"cs\">internal virtual string TextposDescription() {   var sb = new StringBuilder();   int remaining;    sb.Append(runtextpos);    if (sb.Length &lt; 8)     sb.Append(' ', 8 - sb.Length);    if (runtextpos &gt; runtextbeg)     sb.Append(RegexCharClass.CharDescription(runtext[runtextpos - 1]));   else     sb.Append('^');    sb.Append('&gt;');    remaining = runtextend - runtextpos;    for (int i = runtextpos; i &lt; runtextend; i++)   {     sb.Append(RegexCharClass.CharDescription(runtext[i]));   }   if (sb.Length &gt;= 64)   {     sb.Length = 61;     sb.Append(\"...\");   }   else   {     sb.Append('$');   }    return sb.ToString(); }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3137\/\">V3137<\/a> The &#8216;remaining&#8217; variable is assigned but is not used by the end of the function. RegexRunner.cs 612<\/p>\n<p>  \u0412 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <i>remaining<\/i> \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043d\u043e \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 \u0435\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043a\u043e\u0434, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 \u0435\u0451, \u0443\u0434\u0430\u043b\u0438\u043b\u0438, \u043d\u043e \u043f\u0440\u043e \u0441\u0430\u043c\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0437\u0430\u0431\u044b\u043b\u0438. \u0418\u043b\u0438 \u0436\u0435 \u0437\u0434\u0435\u0441\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u0438 \u044d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043a\u0430\u043a-\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>  <b>Issue 61<\/b>  <\/p>\n<pre><code class=\"cs\">public void AddRange(char first, char last) {   _rangelist.Add(new SingleRange(first, last));   if (_canonical &amp;&amp; _rangelist.Count &gt; 0 &amp;&amp;      first &lt;= _rangelist[_rangelist.Count - 1].Last)   {     _canonical = false;   } }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3063\/\">V3063<\/a> A part of conditional expression is always true if it is evaluated: _rangelist.Count &gt; 0. RegexCharClass.cs 523<\/p>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u043b, \u0447\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u2014 <i>_rangelist.Count &gt; 0<\/i> \u2014 \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>true<\/i>, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 <i>_rangelist<\/i>, \u0431\u044b\u043b \u043f\u0443\u0441\u0442\u044b\u043c, \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u2014 <i>_rangelist.Add(&#8230;.)<\/i> \u2014 \u043e\u043d \u0442\u0430\u043a\u043e\u0432\u044b\u043c \u0443\u0436\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<p>  <b>Issue 62<\/b><\/p>\n<p>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430 <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3128\/\">V3128<\/a> \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 <i>System.Drawing.Common<\/i> \u0438 <i>System.Transactions.Local<\/i>.  <\/p>\n<pre><code class=\"cs\">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;   }   .... }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3128\/\">V3128<\/a> The &#8216;_index&#8217; field is used before it is initialized in constructor. PrinterSettings.Windows.cs 1679<\/p>\n<p>  \u041f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044f <i>_endIndex<\/i> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u0435 \u043f\u043e\u043b\u0435 \u2014 <i>_index<\/i>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043c\u0435\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u2014 <i>default(int)<\/i>, \u0442\u043e \u0435\u0441\u0442\u044c <i>0<\/i>. \u041d\u0438\u0436\u0435 \u043f\u043e\u043b\u0435 <i>_index<\/i> \u0443\u0436\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u044d\u0442\u043e \u043d\u0435 \u043e\u0448\u0438\u0431\u043a\u0430 \u2014 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <i>_index <\/i> \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u043e \u0431\u044b \u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0441\u0431\u0438\u0432\u0430\u043b\u0430 \u0441 \u0442\u043e\u043b\u043a\u0443.<\/p>\n<p>  <b>Issue 63<\/b>  <\/p>\n<pre><code class=\"cs\">internal class TransactionTable {   ....   private int _timerInterval;   ....    internal TransactionTable()   {     \/\/ Create a timer that is initially disabled by specifing      \/\/  an Infinite time to the first interval     _timer = new Timer(new TimerCallback(ThreadTimer),                         null,                         Timeout.Infinite,                        _timerInterval);      ....      \/\/ Store the timer interval     _timerInterval = 1 &lt;&lt; TransactionTable.timerInternalExponent;     ....   } }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/b>: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3128\/\">V3128<\/a> The &#8216;_timerInterval&#8217; field is used before it is initialized in constructor. TransactionTable.cs 151<\/p>\n<p>  \u0421\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u0432\u044b\u0448\u0435. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f <i>_timerInterval<\/i> (\u043f\u043e\u043a\u0430 \u043e\u043d\u043e \u0435\u0449\u0451 \u0440\u0430\u0432\u043d\u043e <i>default(int)<\/i>) \u0434\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <i>_timer<\/i>, \u0438 \u043b\u0438\u0448\u044c \u0437\u0430\u0442\u0435\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0442 \u0441\u0430\u043c\u043e \u043f\u043e\u043b\u0435 <i>_timerInterval<\/i>.<\/p>\n<p>  <b>Issue 64<\/b><\/p>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u044b\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0435\u0449\u0451 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435. \u0423 \u043d\u0435\u0433\u043e \u043f\u043e\u043a\u0430 \u043d\u0435\u0442 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043d\u043e \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0443\u0436\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u043f\u0430\u0440\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043c\u0435\u0441\u0442. \u041e\u043f\u044f\u0442\u044c \u044d\u0442\u0438 \u043c\u0435\u0441\u0442\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043a\u0430\u043a <i>copy-paste<\/i>, \u0442\u0430\u043a \u0447\u0442\u043e \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430.  <\/p>\n<pre><code class=\"cs\">private bool ProcessNotifyConnection(....) {   ....   WeakReference reference = (WeakReference)(     LdapConnection.s_handleTable[referralFromConnection]);   if (   reference != null        &amp;&amp; reference.IsAlive        &amp;&amp; null != ((LdapConnection)reference.Target)._ldapHandle)   { .... }   .... }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio (\u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0430)<\/b>: VXXXX TODO_MESSAGE. LdapSessionOptions.cs 974<\/p>\n<p>  \u041e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0437\u0434\u0435\u0441\u044c \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 <i>reference.IsAlive <\/i> \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0441\u0431\u043e\u0440\u043a\u0430 \u043c\u0443\u0441\u043e\u0440\u0430 \u0438 \u043f\u043e\u0434 \u043d\u0435\u0451 \u043f\u043e\u043f\u0430\u0434\u0451\u0442 \u043e\u0431\u044a\u0435\u043a\u0442, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f <i>WeakReference<\/i>, <i>reference.Target <\/i> \u0432\u0435\u0440\u043d\u0451\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null<\/i>. \u041a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u2014 \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043a \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043d\u043e\u043c\u0443 \u043f\u043e\u043b\u044e <i>_ldapHandle<\/i> \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <i>NullReferenceException<\/i>. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0440\u043e \u044d\u0442\u0443 \u043b\u043e\u0432\u0443\u0448\u043a\u0443 \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 IsAlive \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0435\u0442 \u0438 \u0441\u0430\u043c Microsoft. \u0426\u0438\u0442\u0430\u0442\u0430 \u0441 docs.microsoft.com \u2014 &#171;<a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/system.weakreference.isalive?view=netcore-3.0\">WeakReference.IsAlive Property<\/a>&#171;: <i>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.<\/i><\/p>\n<h2>\u041e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430<\/h2>\n<p>  \u0412\u0441\u0435 \u043b\u0438 \u044d\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430, \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430? \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0435\u0442! \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0430\u043d\u0430\u043b\u0438\u0437\u0430, \u044f \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f. \u041f\u043e \u043c\u0435\u0440\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u043b\u043e\u0441\u044c \u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u043d\u0430 \u0441\u0442\u0430\u0442\u044c\u044e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439 \u043d\u0430\u0431\u0435\u0440\u0451\u0442\u0441\u044f, \u044f \u043f\u0440\u043e\u043b\u0438\u0441\u0442\u044b\u0432\u0430\u043b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u0441\u0442\u0430\u0440\u0430\u044f\u0441\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043c\u043d\u0435 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c. \u041a\u043e\u0433\u0434\u0430 \u0434\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u0434\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 (\u0441\u0430\u043c\u044b\u0445 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043b\u043e\u0433\u043e\u0432), \u0441\u0438\u043b \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u0443\u0436\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u043b\u0438\u0441\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f, \u043f\u043e\u043a\u0430 \u0432\u0437\u0433\u043b\u044f\u0434 \u043d\u0435 \u0437\u0430\u0446\u0435\u043f\u0438\u0442\u0441\u044f \u0437\u0430 \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u043e\u0435. \u0422\u0430\u043a \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u043f\u043e\u043a\u043e\u043f\u0430\u0442\u044c\u0441\u044f, \u0443\u0432\u0435\u0440\u0435\u043d, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0435\u0449\u0451 \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043c\u0435\u0441\u0442.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044f \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3022\/\">V3022<\/a> \u0438 <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3063\/\">V3063<\/a>. \u0423\u0441\u043b\u043e\u0432\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0435\u0441\u043b\u0438 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b\u0441\u044f \u043a\u043e\u0434 \u0432\u0438\u0434\u0430:  <\/p>\n<pre><code class=\"cs\">String str = null; if (str == null)    ....<\/code><\/pre>\n<p>  \u042f \u0435\u0433\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u043b, \u0442\u0430\u043a \u043a\u0430\u043a \u0431\u044b\u043b\u0438 \u043c\u0435\u0441\u0442\u0430 \u043f\u043e\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043e\u043f\u0438\u0441\u0430\u0442\u044c. \u0411\u044b\u043b\u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0443\u044e \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <i>lock statement <\/i> \u0441 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u043f\u043e <i>this<\/i> \u0438 \u0442.\u043f. \u2014 <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3090\/\">V3090<\/a>; \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u2014 <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3083\/\">V3083<\/a>; \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0442\u0438\u043f\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 <i>IDisposable<\/i>, \u043d\u043e \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <i>Dispose<\/i> \/ <i>Close<\/i> \u2014 <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3072\/\">V3072<\/a> \u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438; \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435. <\/p>\n<p>  \u041d\u0435 \u0432\u044b\u043f\u0438\u0441\u044b\u0432\u0430\u043b (\u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u2014 \u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f, \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043c\u043e\u0433 \u0447\u0442\u043e-\u0442\u043e \u0432\u044b\u043f\u0438\u0441\u0430\u0442\u044c) \u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0432 \u0442\u0435\u0441\u0442\u0430\u0445. \u041a\u0440\u043e\u043c\u0435 \u043f\u0430\u0440\u044b \u043c\u0435\u0441\u0442, \u043f\u043e\u043a\u0430\u0437\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043c\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u043d\u0438\u0445 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435. \u041d\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u0432\u0435\u0434\u044c \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u0442\u0435\u0441\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435\u0432\u0435\u0440\u043d\u043e.<\/p>\n<p>  \u0412 \u043e\u0431\u0449\u0435\u043c, \u0435\u0449\u0451 \u0435\u0441\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u0438\u0437\u0443\u0447\u0430\u0442\u044c \u2014 \u043d\u043e \u0432\u044b\u043f\u0438\u0441\u0430\u0442\u044c <i>\u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0432\u0441\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b<\/i> \u0446\u0435\u043b\u044c\u044e \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u0431\u043e\u0439 \u044f \u043d\u0435 \u0441\u0442\u0430\u0432\u0438\u043b.<\/p>\n<p>  \u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u0434\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043c\u043d\u0435 \u043d\u0435\u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u043c. \u041e\u0434\u043d\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u2014 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u0447\u0438\u0441\u0442\u044b\u0435, \u0434\u0440\u0443\u0433\u0438\u0435 \u0436\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430. \u041f\u043e\u0436\u0430\u043b\u0443\u0439, \u0447\u0438\u0441\u0442\u043e\u0442\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u0430, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u044b\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043e\u0431\u043e\u0431\u0449\u0430\u0442\u044c \u2014 \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043a\u043e\u0434 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u0432\u0438\u0434\u0443 \u0442\u043e\u0433\u043e, \u043e\u0431\u044a\u0451\u043c \u043a\u043e\u0434\u0430 \u0431\u044b\u043b \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u0432\u0441\u0451 \u0436\u0435 \u043d\u0435\u043c\u0430\u043b\u044b\u0439. \u041d\u043e, \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0437 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u0431\u0435\u0437 \u0442\u0451\u043c\u043d\u044b\u0445 \u0443\u0433\u043e\u043b\u043a\u043e\u0432 \u043d\u0435 \u043e\u0431\u043e\u0448\u043b\u043e\u0441\u044c.<\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u043f\u0440\u043e\u0435\u043a\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u043e\u0431\u044a\u0451\u043c\u0430 \u2014 \u044d\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0442\u0435\u0441\u0442 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430. \u041c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0440\u044f\u0434 \u043b\u043e\u0436\u043d\u044b\u0445 \/ \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043e\u0442\u043e\u0431\u0440\u0430\u043b \u0434\u043b\u044f \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u0422\u0430\u043a \u0447\u0442\u043e \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0442\u0435 \u0442\u043e\u0447\u043a\u0438, \u0433\u0434\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u043d\u0430\u0434 \u0441\u0430\u043c\u0438\u043c PVS-Studio.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430, \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0432 \u0441\u0442\u0430\u0442\u044c\u044e \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u044c\u0442\u0435 \u043f\u043e\u0436\u0430\u0442\u044c \u0432\u0430\u0448\u0443 \u0440\u0443\u043a\u0443! \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u0443 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430. \u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0437\u043d\u0430\u043b\u0438 \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u0447\u0442\u043e-\u0442\u043e \u043d\u043e\u0432\u043e\u0435, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0430\u043c \u0431\u043e\u043b\u0435\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u2014 \u044f \u0431\u0443\u0434\u0443 \u0440\u0430\u0434 \u0432\u0434\u0432\u043e\u0439\u043d\u0435. <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/6ef\/dbc\/f2d\/6efdbcf2d984bef000cf44face04c6a4.png\" alt=\"Picture 24\"><\/div>\n<p>  \u0422\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435, \u043f\u043e\u043c\u043e\u0449\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043b\u0438\u0448\u043d\u0435\u0439 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e <a href=\"https:\/\/www.viva64.com\/ru\/pvs-studio-download\/\">\u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c PVS-Studio<\/a> \u043d\u0430 \u0441\u0432\u043e\u0451\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430 \u0443\u0434\u0430\u0441\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e. \u0415\u0441\u043b\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u2014 \u0441\u043c\u0435\u043b\u043e \u043f\u0438\u0448\u0438\u0442\u0435 \u043d\u0430 <a href=\"mailto:support@viva64.com\">support@viva64.com<\/a>. \ud83d\ude42<\/p>\n<p>  \u0412\u0441\u0435\u0433\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e!<\/p>\n<h2>P.S. \u041e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a .NET Core<\/h2>\n<p>  \u0411\u043e\u043b\u044c\u0448\u043e\u0435 \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u043b\u0430\u0435\u0442\u0435! \u0412\u044b \u2014 \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043c\u043e\u043b\u043e\u0434\u0446\u044b. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u0434 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435. \u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0432\u044b\u043f\u0438\u0441\u0430\u043b \u043d\u0435 \u0432\u0441\u0435 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430, \u0438 \u043b\u0443\u0447\u0448\u0435 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u2014 \u0442\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0432\u0441\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f, \u0434\u0430 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u0435\u0435, \u0447\u0435\u043c \u0441 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u043c \u043b\u043e\u0433\u043e\u043c \/ \u043f\u0435\u0440\u0435\u0447\u043d\u0435\u043c \u043e\u0448\u0438\u0431\u043e\u043a (\u0447\u0443\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 <a href=\"https:\/\/www.viva64.com\/ru\/b\/0449\/\">\u044f \u043f\u0438\u0441\u0430\u043b \u043e\u0431 \u044d\u0442\u043e\u043c \u0437\u0434\u0435\u0441\u044c<\/a>).<\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/463535\/\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/898\/3b6\/5a7\/8983b65a74adb29a2113eba12fbec3f1.png\" align=\"left\"><\/a><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u0441 \u0430\u043d\u0433\u043b\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0439 \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u0435\u0439, \u0442\u043e \u043f\u0440\u043e\u0448\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434: Sergey Vasiliev. <a href=\"https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/463535\/\">Checking the .NET Core Libraries Source Code by the PVS-Studio Static Analyzer<\/a><\/div>\n<p>               <script class=\"js-mediator-script\">!function(e){function t(t,n){if(!(n in e)){for(var r,a=e.document,i=a.scripts,o=i.length;o--;)if(-1!==i[o].src.indexOf(t)){r=i[o];break}if(!r){r=a.createElement(\"script\"),r.type=\"text\/javascript\",r.async=!0,r.defer=!0,r.src=t,r.charset=\"UTF-8\";var d=function(){var e=a.getElementsByTagName(\"script\")[0];e.parentNode.insertBefore(r,e)};\"[object Opera]\"==e.opera?a.addEventListener?a.addEventListener(\"DOMContentLoaded\",d,!1):e.attachEvent(\"onload\",d):d()}}}t(\"\/\/mediator.mail.ru\/script\/2820404\/\",\"_mediator\")}(window);<\/script>     <br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/463537\/\"> https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/463537\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/4c0\/729\/039\/4c07290399528de52d8d420c47690911.png\" alt=\"Picture 19\"><\/div>\n<p>  \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 .NET Core \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 C# \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 GitHub. \u041d\u0435\u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0435\u0433\u043e \u0448\u0438\u0440\u043e\u043a\u043e\u0439 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0441\u0442\u0438. \u0422\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0442\u0451\u043c\u043d\u044b\u0435 \u0443\u0433\u043e\u043b\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u044d\u0442\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0447\u0442\u043e \u043c\u044b \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 PVS-Studio. \u041a\u0430\u043a \u0434\u0443\u043c\u0430\u0435\u0442\u0435, \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043b\u0438 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435?  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-293304","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/293304","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=293304"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/293304\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=293304"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=293304"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=293304"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}