{"id":482390,"date":"2026-06-04T11:54:12","date_gmt":"2026-06-04T11:54:12","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=482390"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=482390","title":{"rendered":"\u041e\u0448\u0438\u0431\u043a\u0438 \u0438 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 .NET 10"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0427\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u043b\u0443\u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434 \u0441\u043e\u0441\u0442\u043e\u044f\u043b\u0441\u044f \u0440\u0435\u043b\u0438\u0437 .NET 10. \u041e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u043b\u0438 \u0434\u0435\u0444\u0435\u043a\u0442\u044b \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0441\u043f\u0443\u0441\u0442\u044f \u043c\u0435\u0441\u044f\u0446\u044b \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u043b\u0438\u0437\u0430? \u041f\u043e\u0441\u0442\u0430\u0440\u0430\u0435\u043c\u0441\u044f \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430\u0439\u0442\u0438 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441. \u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f!<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/8de\/900\/7e5\/8de9007e55b424a62f7251e901775e32.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/\/post_images\/8de\/900\/7e5\/8de9007e55b424a62f7251e901775e32.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/8de\/900\/7e5\/8de9007e55b424a62f7251e901775e32.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u043f\u0440\u0438\u043d\u0435\u0441\u043b\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439: \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043d\u043e\u0432\u044b\u0435 API \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u044b\u0435 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0438 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430. \u041d\u043e, \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430, \u0434\u0430\u0436\u0435 \u043a\u043e\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0442\u0430\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043d\u0435 \u0437\u0430\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u0430\u043d \u043e\u0442 \u043e\u0448\u0438\u0431\u043e\u043a.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 .NET 10 (\u0432\u0435\u0440\u0441\u0438\u0438 <a href=\"https:\/\/github.com\/dotnet\/runtime\/tree\/v10.0.8\">10.0.8<\/a>) \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 <a href=\"https:\/\/pvs-studio.ru\/ru\/\">PVS-Studio<\/a>.<\/p>\n<p>\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432 \u043a\u043e\u0434\u0430, \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u043c\u0435\u0441\u0442, \u0437\u0430\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0445 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \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<p>\u041a\u0430\u043a \u0431\u044b\u043b\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0440\u0430\u043d\u0435\u0435, \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0440\u0435\u043b\u0438\u0437\u0430 .NET 10 \u043f\u0440\u043e\u0448\u043b\u043e \u0443\u0436\u0435 \u043d\u0435\u043c\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u0441\u0432\u0435\u0436\u0438\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u043e\u0432\u043e\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043b\u0438\u0448\u043d\u0438\u043c:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/csharp\/1308\/\">\u0427\u0442\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u0432 .NET 10?<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/csharp\/1301\/\">\u041e\u0431\u0437\u043e\u0440 \u043d\u043e\u0432\u043e\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u0432 C# 14<\/a>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0440\u0430\u0437\u0431\u043e\u0440\u043e\u043c \u043a\u043e\u0434\u0430 .NET10, \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u044f\u0437\u044b\u043a\u043e\u0432, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 PVS-Studio, \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442\u0441\u044f. \u0422\u0435\u043f\u0435\u0440\u044c \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0430\u043d\u043d\u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0434\u043b\u044f Go, JavaScript \u0438 TypeScript. <a href=\"https:\/\/pvs-studio.ru\/ru\/pvs-studio-eap\/\">\u0417\u0434\u0435\u0441\u044c<\/a> \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n<p>\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c \u043a \u0440\u0430\u0437\u0431\u043e\u0440\u0443 \u043a\u043e\u0434\u0430!<\/p>\n<h3>\u0412\u0441\u0435\u0433\u0434\u0430 \u043b\u043e\u0436\u044c<\/h3>\n<p><strong>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 1<\/strong><\/p>\n<pre><code class=\"cs\">public static void ReflectionWriteValue(....){  ....  if (memberValue == null)                                      \/\/ &lt;=  {    context.WriteNull(xmlWriter,                    memberType,                     DataContract.IsTypeSerializable(memberType));  }  else  {    PrimitiveDataContract? primitiveContract = ....;    if (   primitiveContract != null         &amp;&amp; primitiveContract.UnderlyingType != Globals.TypeOfObject         &amp;&amp; !writeXsiType)    {      primitiveContract.WriteXmlValue(xmlWriter, memberValue, context);    }    else    {      if (   memberValue == null                                \/\/ &lt;=          &amp;&amp; (   memberType == Globals.TypeOfObject              || (originValueIsNullableOfT &amp;&amp; memberType.IsValueType)))      {        context.WriteNull(xmlWriter,                          memberType,                          DataContract.IsTypeSerializable(memberType));      }      else      {        ReflectionInternalSerialize(xmlWriter,                                    context,                                    memberValue!,                                    memberValue!.GetType()                                               .TypeHandle                                               .Equals(memberType.TypeHandle),                                    writeXsiType,                                     memberType,                                    originValueIsNullableOfT);      }    }  }  ....}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v3022\/\">V3022<\/a> Expression \u2018memberValue == null &amp;&amp; (memberType == Globals.TypeOfObject || (originValueIsNullableOfT &amp;&amp; memberType.IsValueType))\u2019 is always false. <a href=\"https:\/\/github.com\/dotnet\/runtime\/blob\/v10.0.8\/src\/libraries\/System.Private.DataContractSerialization\/src\/System\/Runtime\/Serialization\/ReflectionClassWriter.cs#L94\">ReflectionClassWriter.cs 94<\/a><\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 <code>if<\/code> \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f. \u0412 \u043d\u0451\u043c \u043d\u0430 <code>null<\/code> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f <code>memberValue<\/code>. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0432 <code>else<\/code> \u0431\u043b\u043e\u043a\u0435 \u044d\u0442\u043e\u0433\u043e <code>if<\/code> \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>memberValue<\/code> \u043d\u0435 <code>null<\/code>. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u044d\u0442\u043e\u043c \u0431\u043b\u043e\u043a\u0435 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430:<\/p>\n<pre><code class=\"cs\">if (   memberValue == null     &amp;&amp; (   memberType == Globals.TypeOfObject        || (originValueIsNullableOfT &amp;&amp; memberType.IsValueType)))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u0430\u043d\u043d\u043e\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043b\u043e\u0436\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 <code>memberValue<\/code> \u043d\u0430 <code>null<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <code>&amp;&amp;<\/code>.<\/p>\n<h3>\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432<\/h3>\n<p><strong>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 2<\/strong><\/p>\n<pre><code class=\"cs\">protected override string GetName(NodeFactory factory){  return   \"Reflectable delegate type: \"          + _delegateType?.ToString() ?? \"All delegates\";}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v3123\/\">V3123<\/a> Perhaps the \u2018??\u2019 operator works in a different way than it was expected. Its priority is lower than priority of other operators in its left part. <a href=\"https:\/\/github.com\/dotnet\/runtime\/blob\/v10.0.8\/src\/coreclr\/tools\/aot\/ILCompiler.Compiler\/Compiler\/DependencyAnalysis\/ReflectedDelegateNode.cs#L38\">ReflectedDelegateNode.cs 38<\/a><\/p>\n<p>\u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043a\u043e\u0434\u0430, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442, \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>??<\/code> \u0438\u043c\u0435\u0435\u0442 \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043d\u0438\u0437\u043a\u0438\u0445 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u043b\u043e\u0433\u0438\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043b\u043e\u0433\u0438\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0435 \u043f\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u043b\u0430, \u043e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0435\u0441\u0442\u044c. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 <code>GetName<\/code> \u043f\u043e\u043b\u0435 <code>delegateType<\/code> \u0431\u0443\u0434\u0435\u0442 <code>null<\/code>, \u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f: \u201cReflectable delegate type: All delegates\u201d, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c: &#171;Reflectable delegate type: &#171;. \u042d\u0442\u043e \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u043e \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 <code>+<\/code> \u0432\u044b\u0448\u0435, \u0447\u0435\u043c <code>??<\/code>. \u0414\u043b\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0447\u0430\u0441\u0442\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0441\u043a\u043e\u0431\u043a\u0438:<\/p>\n<pre><code class=\"cs\">\"Reflectable delegate type: \" + (_delegateType?.ToString() ?? \"All delegates\");<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h3>\u041f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u043b\u0438<\/h3>\n<p><strong>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 3<\/strong><\/p>\n<pre><code class=\"cs\">public ISymbolNode GenericLookupHelper(    CORINFO_RUNTIME_LOOKUP_KIND runtimeLookupKind,    ReadyToRunHelperId helperId,    object helperArgument,    GenericContext methodContext){  switch (helperId)  {    case ReadyToRunHelperId.TypeHandle:      return GenericLookupTypeHelper(          runtimeLookupKind,          ReadyToRunFixupKind.TypeHandle,          helperArgument,          methodContext);    case ReadyToRunHelperId.MethodHandle:      return GenericLookupMethodHelper(          runtimeLookupKind,          ReadyToRunFixupKind.MethodHandle,          (MethodWithToken)helperArgument,          methodContext);    case ReadyToRunHelperId.MethodEntry:      return GenericLookupMethodHelper(          runtimeLookupKind,          ReadyToRunFixupKind.MethodEntry,          (MethodWithToken)helperArgument,          methodContext);    case ReadyToRunHelperId.MethodDictionary:  \/\/ &lt;=      return GenericLookupMethodHelper(          runtimeLookupKind,          ReadyToRunFixupKind.MethodHandle,    \/\/ &lt;=          (MethodWithToken)helperArgument,          methodContext);    case ReadyToRunHelperId.TypeDictionary:      return GenericLookupTypeHelper(          runtimeLookupKind,          ReadyToRunFixupKind.TypeDictionary,          (TypeDesc)helperArgument,          methodContext);    case ReadyToRunHelperId.VirtualDispatchCell:      return GenericLookupMethodHelper(          runtimeLookupKind,          ReadyToRunFixupKind.VirtualEntry,          (MethodWithToken)helperArgument,          methodContext);    case ReadyToRunHelperId.FieldHandle:      return GenericLookupFieldHelper(          runtimeLookupKind,          ReadyToRunFixupKind.FieldHandle,          (FieldWithToken)helperArgument,          methodContext);    default:      throw new NotImplementedException(helperId.ToString());  }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v3139\/\">V3139<\/a> Two or more case-branches perform the same actions. <a href=\"https:\/\/github.com\/dotnet\/runtime\/blob\/v10.0.8\/src\/coreclr\/tools\/aot\/ILCompiler.ReadyToRun\/Compiler\/DependencyAnalysis\/ReadyToRunSymbolNodeFactory.cs#L583\">ReadyToRunSymbolNodeFactory.cs 583<\/a><\/p>\n<p>\u041a\u043e\u0434 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0432 \u043e\u0434\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435. \u041d\u0435\u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442. \u0415\u0441\u043b\u0438 <code>helperId<\/code> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 <code>ReadyToRunHelperId.MethodDictionary<\/code>, \u0442\u043e \u0432 \u043c\u0435\u0442\u043e\u0434 <code>GenericLookupMethodHelper<\/code> \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f <code>ReadyToRunFixupKind.MethodHandle<\/code>. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e \u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 <code>ReadyToRunFixupKind<\/code> \u0435\u0441\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 <code>MethodDictionary<\/code>. \u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 <code>GenericLookupMethodHelper<\/code>, \u0435\u0441\u043b\u0438 <code>helperId<\/code> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 <code>ReadyToRunHelperId.MethodDictionary<\/code>.<\/p>\n<p><strong>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 4<\/strong><\/p>\n<pre><code class=\"cs\">partial class MutableModule{  ....  public int CompareTo(MutableModule other)  {    return _index.CompareTo(_index);  }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v3062\/\">V3062<\/a> An object \u2018_index\u2019 is used as an argument to its own method. Consider checking the first actual argument of the \u2018CompareTo\u2019 method. <a href=\"https:\/\/github.com\/dotnet\/runtime\/blob\/v10.0.8\/src\/coreclr\/tools\/aot\/ILCompiler.ReadyToRun\/TypeSystem\/Mutable\/MutableModule.Sorting.cs#L19\">MutableModule.Sorting.cs 19<\/a><\/p>\n<p>\u0412 \u043c\u0435\u0442\u043e\u0434\u0435 <code>CompareTo<\/code> \u043f\u043e\u043b\u0435 <code>_index<\/code> \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e \u0441 \u0441\u043e\u0431\u043e\u0439. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f <code>other._index<\/code>.<\/p>\n<p><strong>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 5<\/strong><\/p>\n<pre><code class=\"cs\">public void ComputeReturnValueTreatment(....){  ....  if (descriptor.passedInRegisters)  {    if (descriptor.eightByteCount == 1)    {      if (descriptor.eightByteClassifications0                 == SystemVClassificationType.SystemVClassificationTypeSSE)      {        \/\/ Structs occupying just one eightbyte are treated as int \/ double        fpReturnSize = sizeof(double);      }    }    else    {      \/\/ Size of the struct is 16 bytes      fpReturnSize = 16;      \/\/ The lowest two bits of the size encode       \/\/ the order of the int and SSE fields      if (descriptor.eightByteClassifications0                            \/\/ &lt;=               == SystemVClassificationType.SystemVClassificationTypeSSE)      {        fpReturnSize += 1;      }      if (descriptor.eightByteClassifications0                            \/\/ &lt;=               == SystemVClassificationType.SystemVClassificationTypeSSE)      {        fpReturnSize += 2;      }    }    break;  }  ....}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v3029\/\">V3029<\/a> The conditional expressions of the \u2018if\u2019 statements situated alongside each other are identical. Check lines: 364, 369. <a href=\"https:\/\/github.com\/dotnet\/runtime\/blob\/v10.0.8\/src\/coreclr\/tools\/aot\/ILCompiler.ReadyToRun\/Compiler\/DependencyAnalysis\/ReadyToRun\/TransitionBlock.cs#L364\">TransitionBlock.cs 364<\/a><\/p>\n<p>\u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0434\u0443\u0449\u0438\u0445 <code>if<\/code> \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c\u0438. \u042d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0430\u043a, <code>descriptor.eightByteClassifications0<\/code> \u0434\u0432\u0430\u0436\u0434\u044b \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 <code>SystemVClassificationType.SystemVClassificationTypeSSE<\/code>. \u041d\u0430 \u043c\u044b\u0441\u043b\u044c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u0430, \u043d\u0430\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u043e\u043b\u044f <code>eightByteClassifications1<\/code> \u0443 <code>descriptor<\/code>. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a.<\/p>\n<h3>\u0422\u043e\u0447\u043d\u043e \u043d\u0435 null?<\/h3>\n<p><strong>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 6<\/strong><\/p>\n<pre><code class=\"cs\">public static bool SubstEqualTypeArrays(TypeArray taDst,                                        TypeArray taSrc,                                        TypeArray typeArgsCls,                                        TypeArray typeArgsMeth){  \/\/ Handle the simple common cases first.  if (taDst == taSrc || (taDst != null &amp;&amp; taDst.Equals(taSrc))) \/\/ &lt;=  {    \/\/ The following assertion is not always true and indicates a problem where    \/\/ the signature of override method does not match the one inherited from    \/\/ the base class. The method match we have found does not take the type    \/\/ arguments of the base class into account.     \/\/ So actually we are not overriding the method that we \"intend\" to.    \/\/ Debug.Assert(taDst == SubstTypeArray(taSrc,                                            typeArgsCls,                                            typeArgsMeth,                                            grfst));    return true;  }  if (taDst.Count != taSrc.Count)                               \/\/ &lt;=    return false;  if (taDst.Count == 0)    return true;  var ctx = new SubstContext(typeArgsCls, typeArgsMeth, true);  if (ctx.IsNop)  {    return false;  }  for (int i = 0; i &lt; taDst.Count; i++)  {    if (!SubstEqualTypesCore(taDst[i], taSrc[i], ctx))      return false;  }  return true;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v3125\/\">V3125<\/a> The \u2018taDst\u2019 object was used after it was verified against null. Check lines: 354, 344. <a href=\"https:\/\/github.com\/dotnet\/runtime\/blob\/v10.0.8\/src\/libraries\/Microsoft.CSharp\/src\/Microsoft\/CSharp\/RuntimeBinder\/Semantics\/Types\/TypeManager.cs#L354\">TypeManager.cs 354<\/a><\/p>\n<p>\u0412 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u043f\u0435\u0440\u0432\u043e\u0433\u043e <code>if<\/code> \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>taDst<\/code> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043d\u0430 <code>null<\/code>. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>null<\/code>. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e <code>if<\/code> \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>taDst<\/code> \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: <code>taDst.Count<\/code>. \u0415\u0441\u043b\u0438 <code>taDst<\/code> \u0431\u0443\u0434\u0435\u0442 <code>null<\/code>, \u0430 <code>taSrc<\/code> \u043d\u0435 <code>null<\/code>, \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0431\u0440\u043e\u0448\u0435\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <code>NullReferenceException<\/code>.<\/p>\n<p><strong>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 7<\/strong><\/p>\n<pre><code class=\"cs\">internal void WriteXmlnsAttribute(XmlDictionaryString ns){  if (dictionaryWriter != null)  {    if (ns != null)       dictionaryWriter.WriteXmlnsAttribute(null, ns);  }  else    WriteXmlnsAttribute(ns.Value);}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v3125\/\">V3125<\/a> The \u2018ns\u2019 object was used and was verified against null in different execution branches. Check lines: 71, 67. <a href=\"https:\/\/github.com\/dotnet\/runtime\/blob\/v10.0.8\/src\/libraries\/System.Private.DataContractSerialization\/src\/System\/Runtime\/Serialization\/XmlWriterDelegator.cs#L71\">XmlWriterDelegator.cs 71<\/a><\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441\u0445\u043e\u0436\u0430 \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439. \u0412 \u0431\u043b\u043e\u043a\u0435 <code>then<\/code> \u043f\u0435\u0440\u0432\u043e\u0433\u043e <code>if<\/code> \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>ns<\/code> \u043f\u0435\u0440\u0435\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043d\u0430 <code>null<\/code>. \u0412 \u0431\u043b\u043e\u043a\u0435 <code>else<\/code> \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0443\u0436\u0435 \u043d\u0435\u0442. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>ns<\/code> \u043a\u0430\u043a-\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u043f\u043e\u043b\u0435\u043c <code>dictionaryWriter<\/code>, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c <code>ns<\/code> \u043d\u0430 <code>null<\/code>, \u0435\u0441\u043b\u0438 <code>dictionaryWriter<\/code> \u2014 <code>null<\/code>. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0439\u0442\u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c.<\/p>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 <code>dictionaryWriter<\/code> \u0438 <code>ns<\/code> \u0431\u0443\u0434\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>null<\/code>, \u0442\u043e \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a <code>ns.Value<\/code> \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <code>NullReferenceException<\/code>.<\/p>\n<p><strong>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 8<\/strong><\/p>\n<pre><code class=\"cs\">private struct ModuleAndIntValueKey : IEquatable&lt;ModuleAndIntValueKey&gt;{  public bool Equals(ModuleAndIntValueKey other) =&gt;          IntValue == other.IntValue       &amp;&amp; (   (Module == null &amp;&amp; other.Module == null)           ||  Module.Equals(other.Module));}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v3125\/\">V3125<\/a> The \u2018Module\u2019 object was used after it was verified against null. Check lines: 180, 180. <a href=\"https:\/\/github.com\/dotnet\/runtime\/blob\/v10.0.8\/src\/coreclr\/tools\/aot\/ILCompiler.ReadyToRun\/Compiler\/DependencyAnalysis\/ReadyToRunCodegenNodeFactory.cs#L180\">ReadyToRunCodegenNodeFactory.cs 180<\/a><\/p>\n<p>\u041f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0442\u0438\u043f\u0430 <code>ModuleAndIntValueKey<\/code> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u0438\u0445 \u043f\u043e\u043b\u044f <code>Module<\/code>:<\/p>\n<pre><code class=\"cs\">(Module == null &amp;&amp; other.Module == null) ||  Module.Equals(other.Module)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 <code>Module<\/code> \u2014 null, \u0430 <code>other.Module<\/code> \u043d\u0435 <code>null<\/code>, \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0431\u0440\u043e\u0448\u0435\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <code>NullReferenceException<\/code>. \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 <code>||<\/code> \u0431\u0443\u0434\u0435\u0442 <code>false<\/code> \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044e <code>Module<\/code> \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 <code>Equals<\/code>.<\/p>\n<p>\u0414\u043b\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430 <code>null<\/code>, \u043f\u0435\u0440\u0435\u0434 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435\u043c \u043a <code>Module<\/code>.<\/p>\n<p><strong>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 9<\/strong><\/p>\n<pre><code class=\"cs\">public bool IsInheritanceChainLayoutFixedInCurrentVersionBubble(TypeDesc type){  \/\/ This method is not expected to be called for value types  Debug.Assert(!type.IsValueType);  if (type.IsObject)    return true;  if (!IsLayoutFixedInCurrentVersionBubble(type))  {    return false;  }  type = type.BaseType;  if (type != null)  {    return false;    while (!type.IsObject &amp;&amp; type != null)    {      if (!IsLayoutFixedInCurrentVersionBubble(type))      {        return false;      }      type = type.BaseType;    }  }    return true;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v3027\/\">V3027<\/a> The variable \u2018type\u2019 was utilized in the logical expression before it was verified against null in the same logical expression. <a href=\"https:\/\/github.com\/dotnet\/runtime\/blob\/v10.0.8\/src\/coreclr\/tools\/aot\/ILCompiler.ReadyToRun\/Compiler\/ReadyToRunCodegenCompilation.cs#L596\">ReadyToRunCodegenCompilation.cs 596<\/a><\/p>\n<p>\u0412 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 <code>while<\/code> \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443 <code>IsObject<\/code> \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>type<\/code>, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442 <code>type<\/code> \u043d\u0430 <code>null<\/code>. \u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0442\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043c\u0430\u043b\u043e\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0430. \u0415\u0441\u043b\u0438 <code>type<\/code> \u0432\u0441\u0451 \u0436\u0435 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f <code>null<\/code>, \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0431\u0440\u043e\u0448\u0435\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <code>NullReferenceException<\/code>.<\/p>\n<p>\u0414\u043b\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e \u043b\u0438\u0431\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430 <code>null<\/code> \u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435, \u043b\u0438\u0431\u043e, \u0435\u0441\u043b\u0438 <code>type<\/code> \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 <code>null<\/code>, \u0443\u0431\u0440\u0430\u0442\u044c \u044d\u0442\u0443 \u0441\u0430\u043c\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443.<\/p>\n<h3>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u0434\u0432\u043e\u0445\u043e\u043c<\/h3>\n<p><strong>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 10<\/strong><\/p>\n<pre><code class=\"cs\">public class PropertyPseudoDesc : TypeSystemEntity{  ....  public static bool operator ==(PropertyPseudoDesc a, PropertyPseudoDesc b)               =&gt; a._type == b._type &amp;&amp; a._handle == b._handle;  ....}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v3115\/\">V3115<\/a> Passing \u2018null\u2019 to \u2018==\u2019 operator should not result in \u2018NullReferenceException\u2019. <a href=\"https:\/\/github.com\/dotnet\/runtime\/blob\/v10.0.8\/src\/coreclr\/tools\/Common\/Compiler\/PropertyPseudoDesc.cs#L89\">PropertyPseudoDesc.cs 89<\/a><\/p>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0442\u0438\u043f\u0430 <code>PropertyPseudoDesc<\/code> \u043e\u0434\u0438\u043d \u0438\u0437 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 <code>null<\/code>, \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u2018NullReferenceException\u2019. \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043f\u0435\u0440\u0435\u0434 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435\u043c \u043a \u043f\u043e\u043b\u044f\u043c \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u043e\u0432, \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u043e\u043d\u0438 \u043d\u0435 <code>null<\/code>.<\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0412 \u0445\u043e\u0434\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 .NET 10 \u043c\u044b \u0443\u0431\u0435\u0434\u0438\u043b\u0438\u0441\u044c, \u0447\u0442\u043e \u0434\u0430\u0436\u0435 \u0441\u043f\u0443\u0441\u0442\u044f \u043f\u043e\u043b\u0433\u043e\u0434\u0430 \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u043b\u0438\u0437\u0430 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u0434\u0435\u0444\u0435\u043a\u0442\u044b \u0438 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u0438. \u0427\u0430\u0441\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043e\u0448\u0438\u0431\u043a\u0430\u043c: \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f, \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 NRE \u0438 \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b\u0435 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u043b\u043e\u0433\u0438\u043a\u0438. \u0422\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441\u043b\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u043f\u0440\u0438 \u0431\u0435\u0433\u043b\u043e\u043c \u043a\u043e\u0434-\u0440\u0435\u0432\u044c\u044e, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 \u043a\u0440\u0443\u043f\u043d\u043e\u0439 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u0435 \u0443\u0440\u043e\u0432\u043d\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b.<\/p>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0433\u043e\u0434 \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e .NET:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/csharp\/1216\/\">\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 .NET 9<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/csharp\/1095\/\">\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 .NET 8<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/csharp\/1015\/\">\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 .NET 7<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/csharp\/0903\/\">\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 .NET 6<\/a>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u044b\u0442\u044c \u0432 \u043a\u0443\u0440\u0441\u0435 \u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a, <a href=\"https:\/\/pvs-studio.ru\/ru\/subscribe\/\">\u043f\u043e\u0434\u043f\u0438\u0448\u0438\u0442\u0435\u0441\u044c<\/a> \u043d\u0430 \u043d\u0430\u0448\u0443 \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0443.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\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 PVS-Studio, \u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e <a href=\"https:\/\/pvs-studio.ru\/ru\/pvs-studio\/try-free\/?utm_source=website&amp;utm_medium=habr&amp;utm_campaign=article&amp;utm_content=1380\">\u0441\u0441\u044b\u043b\u043a\u0435<\/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: Nikita Panevin. <a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/csharp\/1380\/\">Bugs and suspicious code fragments in .NET 10<\/a>.<\/p>\n<\/div>\n<p>\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\/articles\/1043650\/\">https:\/\/habr.com\/ru\/articles\/1043650\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0427\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u043b\u0443\u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434 \u0441\u043e\u0441\u0442\u043e\u044f\u043b\u0441\u044f \u0440\u0435\u043b\u0438\u0437 .NET 10. \u041e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u043b\u0438 \u0434\u0435\u0444\u0435\u043a\u0442\u044b \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0441\u043f\u0443\u0441\u0442\u044f \u043c\u0435\u0441\u044f\u0446\u044b \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u043b\u0438\u0437\u0430? \u041f\u043e\u0441\u0442\u0430\u0440\u0430\u0435\u043c\u0441\u044f \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430\u0439\u0442\u0438 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441. \u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f!\u041d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u043f\u0440\u0438\u043d\u0435\u0441\u043b\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439: \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043d\u043e\u0432\u044b\u0435 API \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u044b\u0435 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0438 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430. \u041d\u043e, \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430, \u0434\u0430\u0436\u0435 \u043a\u043e\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0442\u0430\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043d\u0435 \u0437\u0430\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u0430\u043d \u043e\u0442 \u043e\u0448\u0438\u0431\u043e\u043a.\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 .NET 10 (\u0432\u0435\u0440\u0441\u0438\u0438 10.0.8) \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.\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432 \u043a\u043e\u0434\u0430, \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u043c\u0435\u0441\u0442, \u0437\u0430\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0445 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \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.\u041a\u0430\u043a \u0431\u044b\u043b\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0440\u0430\u043d\u0435\u0435, \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0440\u0435\u043b\u0438\u0437\u0430 .NET 10 \u043f\u0440\u043e\u0448\u043b\u043e \u0443\u0436\u0435 \u043d\u0435\u043c\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u0441\u0432\u0435\u0436\u0438\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u043e\u0432\u043e\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043b\u0438\u0448\u043d\u0438\u043c:\u0427\u0442\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u0432 .NET 10?;\u041e\u0431\u0437\u043e\u0440 \u043d\u043e\u0432\u043e\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u0432 C# 14.\u041f\u0435\u0440\u0435\u0434 \u0440\u0430\u0437\u0431\u043e\u0440\u043e\u043c \u043a\u043e\u0434\u0430 .NET10, \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u044f\u0437\u044b\u043a\u043e\u0432, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 PVS-Studio, \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442\u0441\u044f. \u0422\u0435\u043f\u0435\u0440\u044c \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0430\u043d\u043d\u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0434\u043b\u044f Go, JavaScript \u0438 TypeScript. \u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435.\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c \u043a \u0440\u0430\u0437\u0431\u043e\u0440\u0443 \u043a\u043e\u0434\u0430!\u0412\u0441\u0435\u0433\u0434\u0430 \u043b\u043e\u0436\u044c\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 1public static void ReflectionWriteValue(&#8230;.){  &#8230;.  if (memberValue == null)                                      \/\/ &lt;=  {    context.WriteNull(xmlWriter,                    memberType,                     DataContract.IsTypeSerializable(memberType));  }  else  {    PrimitiveDataContract? primitiveContract = &#8230;.;    if (   primitiveContract != null         &amp;&amp; primitiveContract.UnderlyingType != Globals.TypeOfObject         &amp;&amp; !writeXsiType)    {      primitiveContract.WriteXmlValue(xmlWriter, memberValue, context);    }    else    {      if (   memberValue == null                                \/\/ &lt;=          &amp;&amp; (   memberType == Globals.TypeOfObject              || (originValueIsNullableOfT &amp;&amp; memberType.IsValueType)))      {        context.WriteNull(xmlWriter,                          memberType,                          DataContract.IsTypeSerializable(memberType));      }      else      {        ReflectionInternalSerialize(xmlWriter,                                    context,                                    memberValue!,                                    memberValue!.GetType()                                               .TypeHandle                                               .Equals(memberType.TypeHandle),                                    writeXsiType,                                     memberType,                                    originValueIsNullableOfT);      }    }  }  &#8230;.}\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: V3022 Expression \u2018memberValue == null &amp;&amp; (memberType == Globals.TypeOfObject || (originValueIsNullableOfT &amp;&amp; memberType.IsValueType))\u2019 is always false. ReflectionClassWriter.cs 94\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 if \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f. \u0412 \u043d\u0451\u043c \u043d\u0430 null \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f memberValue. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0432 else \u0431\u043b\u043e\u043a\u0435 \u044d\u0442\u043e\u0433\u043e if \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f memberValue \u043d\u0435 null. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u044d\u0442\u043e\u043c \u0431\u043b\u043e\u043a\u0435 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430:if (   memberValue == null     &amp;&amp; (   memberType == Globals.TypeOfObject        || (originValueIsNullableOfT &amp;&amp; memberType.IsValueType)))\u0414\u0430\u043d\u043d\u043e\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043b\u043e\u0436\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 memberValue \u043d\u0430 null \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 &amp;&amp;.\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 2protected override string GetName(NodeFactory factory){  return   &#171;Reflectable delegate type: &#187;          + _delegateType?.ToString() ?? &#171;All delegates&#187;;}\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: V3123 Perhaps the \u2018??\u2019 operator works in a different way than it was expected. Its priority is lower than priority of other operators in its left part. ReflectedDelegateNode.cs 38\u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043a\u043e\u0434\u0430, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442, \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 ?? \u0438\u043c\u0435\u0435\u0442 \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043d\u0438\u0437\u043a\u0438\u0445 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u043b\u043e\u0433\u0438\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043b\u043e\u0433\u0438\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0435 \u043f\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u043b\u0430, \u043e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0435\u0441\u0442\u044c. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 GetName \u043f\u043e\u043b\u0435 delegateType \u0431\u0443\u0434\u0435\u0442 null, \u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f: \u201cReflectable delegate type: All delegates\u201d, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c: &#171;Reflectable delegate type: &#171;. \u042d\u0442\u043e \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u043e \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 + \u0432\u044b\u0448\u0435, \u0447\u0435\u043c ??. \u0414\u043b\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0447\u0430\u0441\u0442\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0441\u043a\u043e\u0431\u043a\u0438:&#187;Reflectable delegate type: &#187; + (_delegateType?.ToString() ?? &#171;All delegates&#187;);\u041f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u043b\u0438\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 3public ISymbolNode GenericLookupHelper(    CORINFO_RUNTIME_LOOKUP_KIND runtimeLookupKind,    ReadyToRunHelperId helperId,    object helperArgument,    GenericContext methodContext){  switch (helperId)  {    case ReadyToRunHelperId.TypeHandle:      return GenericLookupTypeHelper(          runtimeLookupKind,          ReadyToRunFixupKind.TypeHandle,          helperArgument,          methodContext);    case ReadyToRunHelperId.MethodHandle:      return GenericLookupMethodHelper(          runtimeLookupKind,          ReadyToRunFixupKind.MethodHandle,          (MethodWithToken)helperArgument,          methodContext);    case ReadyToRunHelperId.MethodEntry:      return GenericLookupMethodHelper(          runtimeLookupKind,          ReadyToRunFixupKind.MethodEntry,          (MethodWithToken)helperArgument,          methodContext);    case ReadyToRunHelperId.MethodDictionary:  \/\/ &lt;=      return GenericLookupMethodHelper(          runtimeLookupKind,          ReadyToRunFixupKind.MethodHandle,    \/\/ &lt;=          (MethodWithToken)helperArgument,          methodContext);    case ReadyToRunHelperId.TypeDictionary:      return GenericLookupTypeHelper(          runtimeLookupKind,          ReadyToRunFixupKind.TypeDictionary,          (TypeDesc)helperArgument,          methodContext);    case ReadyToRunHelperId.VirtualDispatchCell:      return GenericLookupMethodHelper(          runtimeLookupKind,          ReadyToRunFixupKind.VirtualEntry,          (MethodWithToken)helperArgument,          methodContext);    case ReadyToRunHelperId.FieldHandle:      return GenericLookupFieldHelper(          runtimeLookupKind,          ReadyToRunFixupKind.FieldHandle,          (FieldWithToken)helperArgument,          methodContext);    default:      throw new NotImplementedException(helperId.ToString());  }}\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: V3139 Two or more case-branches perform the same actions. ReadyToRunSymbolNodeFactory.cs 583\u041a\u043e\u0434 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0432 \u043e\u0434\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435. \u041d\u0435\u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442. \u0415\u0441\u043b\u0438 helperId \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 ReadyToRunHelperId.MethodDictionary, \u0442\u043e \u0432 \u043c\u0435\u0442\u043e\u0434 GenericLookupMethodHelper \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f ReadyToRunFixupKind.MethodHandle. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e \u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 ReadyToRunFixupKind \u0435\u0441\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 MethodDictionary. \u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 GenericLookupMethodHelper, \u0435\u0441\u043b\u0438 helperId \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 ReadyToRunHelperId.MethodDictionary.\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 4partial class MutableModule{  &#8230;.  public int CompareTo(MutableModule other)  {    return _index.CompareTo(_index);  }}\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: V3062 An object \u2018_index\u2019 is used as an argument to its own method. Consider checking the first actual argument of the \u2018CompareTo\u2019 method. MutableModule.Sorting.cs 19\u0412 \u043c\u0435\u0442\u043e\u0434\u0435 CompareTo \u043f\u043e\u043b\u0435 _index \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e \u0441 \u0441\u043e\u0431\u043e\u0439. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f other._index.\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 5public void ComputeReturnValueTreatment(&#8230;.){  &#8230;.  if (descriptor.passedInRegisters)  {    if (descriptor.eightByteCount == 1)    {      if (descriptor.eightByteClassifications0                 == SystemVClassificationType.SystemVClassificationTypeSSE)      {        \/\/ Structs occupying just one eightbyte are treated as int \/ double        fpReturnSize = sizeof(double);      }    }    else    {      \/\/ Size of the struct is 16 bytes      fpReturnSize = 16;      \/\/ The lowest two bits of the size encode       \/\/ the order of the int and SSE fields      if (descriptor.eightByteClassifications0                            \/\/ &lt;=               == SystemVClassificationType.SystemVClassificationTypeSSE)      {        fpReturnSize += 1;      }      if (descriptor.eightByteClassifications0                            \/\/ &lt;=               == SystemVClassificationType.SystemVClassificationTypeSSE)      {        fpReturnSize += 2;      }    }    break;  }  &#8230;.}\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: V3029 The conditional expressions of the \u2018if\u2019 statements situated alongside each other are identical. Check lines: 364, 369. TransitionBlock.cs 364\u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0434\u0443\u0449\u0438\u0445 if \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c\u0438. \u042d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0430\u043a, descriptor.eightByteClassifications0 \u0434\u0432\u0430\u0436\u0434\u044b \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 SystemVClassificationType.SystemVClassificationTypeSSE. \u041d\u0430 \u043c\u044b\u0441\u043b\u044c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u0430, \u043d\u0430\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u043e\u043b\u044f eightByteClassifications1 \u0443 descriptor. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a.\u0422\u043e\u0447\u043d\u043e \u043d\u0435 null?\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 6public static bool SubstEqualTypeArrays(TypeArray taDst,                                        TypeArray taSrc,                                        TypeArray typeArgsCls,                                        TypeArray typeArgsMeth){  \/\/ Handle the simple common cases first.  if (taDst == taSrc || (taDst != null &amp;&amp; taDst.Equals(taSrc))) \/\/ &lt;=  {    \/\/ The following assertion is not always true and indicates a problem where    \/\/ the signature of override method does not match the one inherited from    \/\/ the base class. The method match we have found does not take the type    \/\/ arguments of the base class into account.     \/\/ So actually we are not overriding the method that we &#171;intend&#187; to.    \/\/ Debug.Assert(taDst == SubstTypeArray(taSrc,                                            typeArgsCls,                                            typeArgsMeth,                                            grfst));    return true;  }  if (taDst.Count != taSrc.Count)                               \/\/ &lt;=    return false;  if (taDst.Count &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-482390","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/482390","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=482390"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/482390\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=482390"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=482390"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=482390"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}