{"id":28812,"date":"2020-02-19T23:45:00","date_gmt":"2020-02-19T22:45:00","guid":{"rendered":"https:\/\/blexin.com\/?p=28812"},"modified":"2021-01-13T09:40:13","modified_gmt":"2021-01-13T08:40:13","slug":"le-novita-di-c-8-seconda-parte","status":"publish","type":"post","link":"https:\/\/blexin.com\/it\/blog\/le-novita-di-c-8-seconda-parte\/","title":{"rendered":"Le novit\u00e0 di C# 8: seconda parte"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"608\" data-attachment-id=\"27385\" data-permalink=\"https:\/\/blexin.com\/it\/image00-7\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-7.png?fit=1024%2C608&amp;ssl=1\" data-orig-size=\"1024,608\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image00\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-7.png?fit=1024%2C608&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-7.png?resize=1024%2C608&#038;ssl=1\" alt=\"\" class=\"wp-image-27385\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-7.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-7-980x582.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-7-480x285.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Nel precedente articolo, abbiamo visto la prima parte delle novit\u00e0 introdotte dalla versione di C# 8, vediamo ora insieme cosa altro ci mette a disposizione questa nuova versione del linguaggio di casa Microsoft.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Nuova Switch Expression<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sono state rilasciate le nuove Switch Expression, che introducono un modo compatto per scrivere espressioni switch\/case.<br>Vi mostro subito di cosa sto parlando con un esempio:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic static string GetWaterCondition(WaterCondition condition) =&gt;\ncondition.Sea switch\n{\n\u00a0\u00a0\u00a0\u00a0Sea.Calm =&gt; &quot;The sea is calm&quot;,\n\u00a0\u00a0\u00a0\u00a0Sea.Rough =&gt; &quot;The sea is rough&quot;,\n\u00a0\u00a0\u00a0\u00a0Sea.VRough =&gt; &quot;The sea is very rough&quot;,\n\u00a0\u00a0\u00a0\u00a0_ =&gt; &quot;Undefined&quot;\n};\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Come potete vedere:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>La variabile precede la parola chiave switch.&nbsp;<\/li><li>Gli elementi \u201ccase\u201d e \u201c:\u201dvengono sostituiti con \u201c=&gt;\u201d.<\/li><li>Il caso default \u00e8 sostituito con un underscore (o discard) \u201d_\u201d.<\/li><li>I corpi sono espressioni e non istruzioni.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Criteri per le propriet\u00e0<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Grazie alla sintassi precedente possiamo sfruttare anche il property matching. Invece di specificare l&#8217;oggetto da valutare, possiamo indicare le propriet\u00e0 stesse nelle condizioni:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic static string GetWaterCondition(WaterCondition condition) =&gt; condition switch\n{\n\u00a0\u00a0\u00a0\u00a0{Sea: Sea.Calm} =&gt; &quot;The sea is calm&quot;,\n\u00a0\u00a0\u00a0\u00a0{Sea: Sea.Rough} =&gt; &quot;The sea is rough&quot;,\n\u00a0\u00a0\u00a0\u00a0{Sea: Sea.VRough, Wind: Wind.Strong} =&gt; &quot;There\u2019s a storm!&quot;,\n\u00a0\u00a0\u00a0\u00a0{Sea: Sea.VRough} =&gt; &quot;The sea is very rough&quot;,\n\u00a0\u00a0\u00a0\u00a0null =&gt; \u201cUnknown\u201d,\n\u00a0\u00a0\u00a0\u00a0_ =&gt; &quot;Undefined&quot;\n};\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Come prima, valutiamo la propriet\u00e0&nbsp;<em>Sea<\/em>, ma abbiamo la possibilit\u00e0 di valutare anche la propriet\u00e0&nbsp;<em>Wind<\/em>&nbsp;e, oltre al valore di default (\u201c_\u201d), possiamo controllare anche se il valore \u00e8 nullo.&nbsp;Dobbiamo prestare attenzione, per\u00f2, all&#8217;ordine di valutazione: nello snippet di codice precedente dobbiamo necessariamente prima valutare la condizione pi\u00f9 specifica con il&nbsp;<em>mare molto agitato e il vento forte<\/em>&nbsp;(<code>There\u2019s a storm!<\/code>), per poi passare a quella in cui il&nbsp;<em>mare \u00e8 molto agitato<\/em>&nbsp;(<code>The sea is very rough<\/code>).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Criteri per le tuple<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Simile al&nbsp;<em>property pattern<\/em>&nbsp;visto poco fa, nel&nbsp;<em>tuple pattern<\/em>, possiamo invece utilizzare le&nbsp;<em>tuple&nbsp;<\/em>come argomento dello&nbsp;<em>switch<\/em>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic string Location(string country, string city)\n\u00a0\u00a0\u00a0=&gt; (country, city) switch\n\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0(&quot;IT&quot;, &quot;Naples&quot;) =&gt; &quot;Naples, Italy (Campania)\u201d,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0(_, &quot;Naples&quot;) =&gt; &quot;Italy (Campania),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0United States (Utah),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0United States (Texas),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0United States (Florida),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0United States (New York)&quot;,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0(&quot;IT&quot;, _) =&gt; &quot;Italy&quot;,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0_ =&gt; &quot;Not Found&quot;, \/\/Short form for ( _, _) =&gt; &quot;Not Found&quot;\n\u00a0\u00a0\u00a0};\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\"><strong>Criteri per la posizione<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Alcuni oggetti implementano direttamente o indirettamente il&nbsp;<em>deconstruct&nbsp;<\/em>introdotto con C# 7, il quale , in pratica, \u201cappiattisce\u201d un oggetto in una lista di parametri.<br>Utilizzando insieme il&nbsp;<em>deconstruct<\/em>&nbsp;e la clausola&nbsp;<em>when&nbsp;<\/em>in un\u2019istruzione&nbsp;<em>switch&nbsp;<\/em>possiamo sfruttare il&nbsp;<em>positional pattern<\/em>. In questo esempio, possiamo vedere quanto sia facile mappare un punto in un piano cartesiano per capire su quale quadrante \u00e8 posizionato.<br>Supponiamo di avere un&#8217;implementazione di questo tipo:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic class Point\n{\n\u00a0\u00a0\u00a0\u00a0public int X { get; }\n\u00a0\u00a0\u00a0\u00a0public int Y { get; }\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public Point(int x, int y) =&gt; (X, Y) = (x, y);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public void Deconstruct(out int x, out int y) =&gt; (x, y) = (X, Y);\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">L\u2019oggetto&nbsp;<em>Point&nbsp;<\/em>viene decostruito ed inserito in una tupla, viene poi utilizzata la clausola&nbsp;<em>when&nbsp;<\/em>per determinare in quale quadrante si trova il punto:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nprivate string GetPointPosition(Point point) =&gt; point switch\n{\n\u00a0\u00a0\u00a0\u00a0(0, 0) =&gt; &quot;origin&quot;,\n\u00a0\u00a0\u00a0\u00a0var (x, y) when x &gt; 0 &amp;&amp; y &gt; 0 =&gt; &quot;dx-up&quot;,\n\u00a0\u00a0\u00a0\u00a0var (x, y) when x &lt; 0 &amp;&amp; y &gt; 0 =&gt; &quot;sx-up&quot;,\n\u00a0\u00a0\u00a0\u00a0var (x, y) when x &lt; 0 &amp;&amp; y &lt; 0 =&gt; &quot;sx-down&quot;,\n\u00a0\u00a0\u00a0\u00a0var (x, y) when x &gt; 0 &amp;&amp; y &lt; 0 =&gt; &quot;dx-down&quot;,\n\u00a0\u00a0\u00a0\u00a0var (_, _) =&gt; &quot;on border&quot;,\n\u00a0\u00a0\u00a0\u00a0_ =&gt; &quot;unknown&quot;\n};\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\"><strong>Indici ed intervalli<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sono stati introdotti due nuovi<em>&nbsp;tipi<\/em>:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><em>System.Index<\/em>&nbsp;che rappresenta un indice in una sequenza.<\/li><li><em>System.Range&nbsp;<\/em>che rappresenta un intervallo secondario di una sequenza.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Sono stati introdotti inoltre due nuovi operatori:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>L\u2019operatore \u201c<em>^\u201d<\/em>&nbsp;che specifica che un indice parte dalla fine della sequenza.<\/li><li>L\u2019operatore di intervallo \u201c<em>..<\/em>\u201d che specifica l&#8217;inizio e la fine di un intervallo come operandi.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Vediamo di capire meglio di cosa stiamo parlando prendendo in considerazione una matrice&nbsp;<em>daysOfWeek<\/em>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nvar daysOfWeek = new string&#x5B;]\n{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Index from start\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Index from end\n\u00a0\u00a0\u00a0\u00a0&quot;Monday&quot;,\u00a0\u00a0\u00a0\u00a0 \/\/ 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ^7\n\u00a0\u00a0\u00a0\u00a0&quot;Tuesday&quot;,\u00a0\u00a0\u00a0 \/\/ 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ^6 \n\u00a0\u00a0\u00a0\u00a0&quot;Wednesday&quot;,\u00a0 \/\/ 2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ^5\n\u00a0\u00a0\u00a0\u00a0&quot;Thursday&quot;,\u00a0\u00a0 \/\/ 3\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ^4\n\u00a0\u00a0\u00a0\u00a0&quot;Friday&quot;,\u00a0\u00a0\u00a0\u00a0 \/\/ 4\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ^3\n\u00a0\u00a0\u00a0\u00a0&quot;Saturday&quot;,\u00a0\u00a0 \/\/ 5\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ^2\n\u00a0\u00a0\u00a0\u00a0&quot;Sunday&quot;\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ 6\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ^1\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ 7 (or daysOfWeek.Length) ^0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \n};\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">L&#8217;indice [0] \u00e8 uguale all\u2019indice [^7] in questo caso \u201cMonday\u201d.<br>L&#8217;indice [7] \u00e8 uguale all\u2019indice [^0] ossia daysOfWeek[daysOfWeek.Length] e quindi genererebbero un&#8217;eccezione. Per qualsiasi numero n, l&#8217;indice ^n \u00e8 uguale a daysOfWeek.Length &#8211; n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un intervallo invece (\u201c..\u201d) specifica inizio e fine di un intervallo. L&#8217;inizio dell&#8217;intervallo \u00e8 inclusivo, ma la fine non \u00e8 inclusa nell&#8217;intervallo.<br>Abbiamo, quindi, diverse opzioni per ottenere intervalli specifici:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nvar allDays = daysOfWeek&#x5B;..]; \/\/Contains all the days of week\nvar startOfTheWeek = daysOfWeek&#x5B;..2]; \/\/ &quot;Monday&quot;, &quot;Tuesday&quot;\nvar weekend = daysOfWeek&#x5B;5..]; \/\/ &quot;Saturday&quot;, &quot;Sunday&quot;\nvar someDays = daysOfWeek&#x5B;^5..^3]; \/\/ &quot;Wednesday&quot;, &quot;Thursday&quot;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">I due nuovi tipi,&nbsp;<em>Index&nbsp;<\/em>e&nbsp;<em>Range<\/em>, possono essere creati tramite i rispettivi costruttori, oppure tramite uno shortcut di C# 8, come nel seguente esempio:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\n\/\/ daysOfWeek&#x5B;0]\nIndex monday = 0;\n\u00a0\n\/\/ &quot;Wednesday&quot;, &quot;Thursday&quot;\nRange someDays = 2..4;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">L\u2019intervallo pu\u00f2 quindi essere utilizzato come variabile:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nvar days = daysOfWeek&#x5B;someDays];\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\"><strong>Tipi riferimento nullable<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Come sappiamo, un oggetto pu\u00f2 essere di tipo valore, appartenente quindi ai tipi primitivi come numeri, struct ecc.<br>Risiedono in una zona di memoria detta stack e hanno sempre un valore, anche se questo \u00e8 una costante predefinita. I tipi di riferimento, invece, come tutte le classi e le stringhe, vanno istanziati nel managed heap e il loro riferimento mantenuto tramite una variabile. Quest\u2019ultima, per\u00f2, pu\u00f2 assumere un valore nullo. Avere una variabile a null vuol dire non puntare a nessuno oggetto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una delle funzionalit\u00e0 aggiunte in C# 8 che ha avuto pi\u00f9 risalto \u00e8 stata l\u2019introduzione del nuovo flag&nbsp;<em>Nullable&nbsp;<\/em>che aggiunto direttamente nel file con estensione .<em>csproj<\/em>, pu\u00f2 abilitare o disabilitare il&nbsp;<em>contesto di annotazione nullable<\/em>&nbsp;e il&nbsp;<em>contesto di avviso nullable<\/em>. Le opzioni valide sono le seguenti:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>enable &#8211;<\/strong>&nbsp;Il&nbsp;<em>contesto dell&#8217;annotazione nullable<\/em>&nbsp;e il&nbsp;<em>contesto dell&#8217;avviso nullable<\/em>&nbsp;sono abilitati: le variabili di un tipo riferimento sono non nullable. Tutti gli avvisi relativi al supporto dei valori Null sono abilitati.<\/li><li><strong>warnings &#8211;<\/strong>&nbsp;Il&nbsp;<em>contesto dell&#8217;annotazione nullable<\/em>&nbsp;\u00e8 disabilitato, mentre il&nbsp;<em>contesto dell&#8217;avviso nullable<\/em>&nbsp;\u00e8 abilitato: le variabili di un tipo riferimento sono indipendenti dai valori. Tutti gli avvisi relativi al supporto dei valori&nbsp;<em>null&nbsp;<\/em>sono abilitati.<\/li><li><strong>annotations &#8211;&nbsp;<\/strong>&nbsp;Il&nbsp;<em>contesto dell&#8217;annotazione nullable<\/em>&nbsp;\u00e8 abilitato, mentre il&nbsp;<em>contesto dell&#8217;avviso nullable<\/em>&nbsp;\u00e8 disabilitato: le variabili di un tipo di riferimento non ammettono valori&nbsp;<em>null<\/em>. Tutti gli avvisi relativi al supporto dei valori&nbsp;<em>null&nbsp;<\/em>sono disabilitati.<\/li><li><strong>disable &#8211;&nbsp;<\/strong>Il&nbsp;<em>contesto dell&#8217;annotazione nullable<\/em>&nbsp;e il&nbsp;<em>contesto dell&#8217;avviso nullable<\/em>&nbsp;sono disabilitati: le variabili di un tipo riferimento sono indipendenti dai valori, come nelle versioni precedenti di C#. Tutti gli avvisi relativi al supporto dei valori&nbsp;<em>null&nbsp;<\/em>sono disabilitati.<\/li><\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\n&lt;Nullable&gt;enable&lt;\/Nullable&gt;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Di fatto stiamo dicendo che il compilatore deve controllare come utilizziamo e come assegniamo qualsiasi tipo di riferimento.<br>All&#8217;interno di un&nbsp;<em>contesto delle annotazioni nullable<\/em>, qualsiasi variabile di un tipo riferimento viene considerata come un tipo riferimento non nullable. Se si vuole indicare che una variabile pu\u00f2 essere&nbsp;<em>null<\/em>, \u00e8 necessario aggiungere \u201c?\u201d al nome del tipo per dichiarare la variabile come un tipo riferimento nullable<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nstring? name;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Per i tipi riferimento non nullable, il compilatore usa l&#8217;analisi di flusso per garantire che le variabili locali vengano inizializzate su un valore diverso da&nbsp;<em>null&nbsp;<\/em>al momento della dichiarazione. I campi devono essere inizializzati durante la costruzione. Una variabile deve essere impostata da uno dei costruttori disponibili o da un inizializzatore ad un valore diverso da&nbsp;<em>null<\/em>. Inoltre, non \u00e8 possibile assegnare ai tipi riferimento un valore che potrebbe essere&nbsp;<em>null<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I tipi riferimento nullable non vengono invece controllati per verificare se vengano assegnati o inizializzati su&nbsp;<em>null<\/em>. Il compilatore per\u00f2 usa l&#8217;analisi di flusso per garantire che qualsiasi variabile di un tipo riferimento nullable venga controllata per i valori&nbsp;<em>null&nbsp;<\/em>prima dell&#8217;accesso o prima che venga assegnata a un tipo riferimento non nullable.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In sostanza, se la caratteristica viene attivata, gli oggetti non dichiarati esplicitamente come&nbsp;<em>Nullable<\/em>, se vengono settati o c\u2019\u00e8 la possibilit\u00e0 che possano assumere un valore null, genereranno un warning in compilazione.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c8 possibile dire al compilatore che siamo sicuri che una variabile (es:&nbsp;<em>name<\/em>), non possa essere nulla, e quindi evitarne il controllo, utilizzando l\u2019operatore \u201c!\u201d.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nname!.Length;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u00c8 anche possibile usare le direttive per impostare questi stessi contesti ovunque nel progetto, non solo per singolo file, ma anche in qualunque parte all\u2019interno di una classe:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><code>#nullable enable<\/code>: imposta il contesto di annotazione nullable e il contesto di avviso nullable su&nbsp;<strong>enabled<\/strong>.<\/li><li><code>#nullable disable<\/code>: imposta il contesto di annotazione nullable e il contesto di avviso nullable su&nbsp;<strong>disabled<\/strong>.<\/li><li><code>#nullable restore<\/code>: ripristina il contesto di annotazione nullable e il contesto di avviso nullable nelle impostazioni del progetto.<\/li><li><code>#nullable disable warnings<\/code>: imposta il contesto di avviso nullable su&nbsp;<strong>disabled<\/strong>.<\/li><li><code>#nullable enable warnings<\/code>: imposta il contesto di avviso nullable su&nbsp;<strong>Enabled<\/strong>.<\/li><li><code>#nullable restore warnings<\/code>: ripristina il contesto di avviso nullable nelle impostazioni del progetto.<\/li><li><code>#nullable disable annotations<\/code>: imposta il contesto di annotazione nullable su&nbsp;<strong>disabled<\/strong>.<\/li><li><code>#nullable enable annotations<\/code>: imposta il contesto di annotazione nullable su&nbsp;<strong>enabled<\/strong>.<\/li><li><code>#nullable restore annotations<\/code>: ripristina il contesto di avviso delle annotazioni nelle impostazioni del progetto.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Per impostazione predefinita, i contesti di annotazione e avviso nullable sono&nbsp;<strong>disabilitati<\/strong>. Ci\u00f2 significa che il codice esistente viene compilato senza modifiche e senza generare nuovi avvisi.<br>Le regole per il controllo sono davvero tante e non voglio dilungarmi oltre. Se siete curiosi di approfondire l\u2019argomento, controllate la documentazione ufficiale.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Null-coalescing assignment<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c8 stato introdotto anche l&#8217;operatore di assegnazione di unione null \u201c??=\u201d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c8 possibile usare l&#8217;operatore \u201c??=\u201d per assegnare il valore dell&#8217;operando destro di una assegnazione, all&#8217;operando sinistro solo se l&#8217;operando sinistro restituisce null.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nList&lt;int&gt; numbers = null;\nnumbers ??= new List&lt;int&gt;();\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\"><strong>Stackalloc nelle espressioni annidate<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;operatore&nbsp;<em>stackalloc&nbsp;<\/em>alloca un blocco di memoria nello&nbsp;<em>stack<\/em>. Un blocco di memoria allocato nello&nbsp;<em>stack<\/em>, creato durante l&#8217;esecuzione del metodo, viene automaticamente eliminato alla restituzione del metodo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con C# 8, se il risultato di un&#8217;espressione<em>&nbsp;stackalloc<\/em>&nbsp;\u00e8 di tipo&nbsp;<em>System.Span&lt;T&gt;<\/em>&nbsp;o&nbsp;<em>System.ReadOnlySpan&lt;T&gt;<\/em>, \u00e8 possibile usare l&#8217;espressione&nbsp;<em>stackalloc&nbsp;<\/em>in altre espressioni:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nSpan&lt;int&gt; numbers = stackalloc&#x5B;] { 1, 2, 3, 4, 5, 6 };\nvar indx = numbers.IndexOfAny(stackalloc&#x5B;] { 2, 4, 6 ,8 });\nConsole.WriteLine(indx);\u00a0 \/\/ output: 1\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\"><strong>Miglioramento delle stringhe verbatim interpolate<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;ordine dei token per le stringhe interpolate, finora prevedeva necessariamente che il token \u201c$\u201d precedesse il token \u201c@\u201d.<br>Adesso l\u2019ordine dei due token \u00e8 indifferente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Entrambe le stringhe:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\n$@&quot;...&quot;\n@$&quot;...&quot;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">sono stringhe interpolate valide.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con questo concludiamo il nostro percorso alla scoperta delle novit\u00e0 di C#8. Le novit\u00e0 sono tante e c\u2019\u00e8 tanto da imparare, anche perch\u00e9 stanno gi\u00e0 lavorando alla versione 9\u2026.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Al prossimo articolo!<\/p>\n\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>Concludiamo l\u2019analisi delle novit\u00e0 di C# 8<\/p>\n","protected":false},"author":196716244,"featured_media":27385,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"off","_et_pb_old_content":"","_et_gb_content_width":"","_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","inline_featured_image":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[688637374],"tags":[688637382],"class_list":["post-28812","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-c"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Le novit\u00e0 di C# 8: seconda parte - Blexin<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blexin.com\/it\/blog\/le-novita-di-c-8-seconda-parte\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Le novit\u00e0 di C# 8: seconda parte - Blexin\" \/>\n<meta property=\"og:description\" content=\"Concludiamo l\u2019analisi delle novit\u00e0 di C# 8\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blexin.com\/it\/blog\/le-novita-di-c-8-seconda-parte\/\" \/>\n<meta property=\"og:site_name\" content=\"Blexin\" \/>\n<meta property=\"article:published_time\" content=\"2020-02-19T22:45:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-01-13T08:40:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i2.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-7.png?fit=1024%2C608&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"608\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Francesco Vastarella\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Francesco Vastarella\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/le-novita-di-c-8-seconda-parte\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/le-novita-di-c-8-seconda-parte\\\/\"},\"author\":{\"name\":\"Francesco Vastarella\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/388dae0ca9df603c88b5e41e29cf2d4d\"},\"headline\":\"Le novit\u00e0 di C# 8: seconda parte\",\"datePublished\":\"2020-02-19T22:45:00+00:00\",\"dateModified\":\"2021-01-13T08:40:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/le-novita-di-c-8-seconda-parte\\\/\"},\"wordCount\":1468,\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/le-novita-di-c-8-seconda-parte\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/image00-7.png?fit=1024%2C608&ssl=1\",\"keywords\":[\"C#\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"it-IT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/le-novita-di-c-8-seconda-parte\\\/\",\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/le-novita-di-c-8-seconda-parte\\\/\",\"name\":\"Le novit\u00e0 di C# 8: seconda parte - Blexin\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/le-novita-di-c-8-seconda-parte\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/le-novita-di-c-8-seconda-parte\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/image00-7.png?fit=1024%2C608&ssl=1\",\"datePublished\":\"2020-02-19T22:45:00+00:00\",\"dateModified\":\"2021-01-13T08:40:13+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/388dae0ca9df603c88b5e41e29cf2d4d\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/le-novita-di-c-8-seconda-parte\\\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/le-novita-di-c-8-seconda-parte\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/le-novita-di-c-8-seconda-parte\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/image00-7.png?fit=1024%2C608&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/image00-7.png?fit=1024%2C608&ssl=1\",\"width\":1024,\"height\":608},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/le-novita-di-c-8-seconda-parte\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blexin.com\\\/it\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Le novit\u00e0 di C# 8: seconda parte\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#website\",\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/\",\"name\":\"Blexin\",\"description\":\"Con noi \u00e8 semplice\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blexin.com\\\/it\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/388dae0ca9df603c88b5e41e29cf2d4d\",\"name\":\"Francesco Vastarella\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3b8deedae8f35372d5fba49f918006fb0a58a2943aff6ae52d3ff188e0c441bb?s=96&d=identicon&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3b8deedae8f35372d5fba49f918006fb0a58a2943aff6ae52d3ff188e0c441bb?s=96&d=identicon&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3b8deedae8f35372d5fba49f918006fb0a58a2943aff6ae52d3ff188e0c441bb?s=96&d=identicon&r=g\",\"caption\":\"Francesco Vastarella\"},\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/author\\\/francesco-vastarellablexin-com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Le novit\u00e0 di C# 8: seconda parte - Blexin","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blexin.com\/it\/blog\/le-novita-di-c-8-seconda-parte\/","og_locale":"it_IT","og_type":"article","og_title":"Le novit\u00e0 di C# 8: seconda parte - Blexin","og_description":"Concludiamo l\u2019analisi delle novit\u00e0 di C# 8","og_url":"https:\/\/blexin.com\/it\/blog\/le-novita-di-c-8-seconda-parte\/","og_site_name":"Blexin","article_published_time":"2020-02-19T22:45:00+00:00","article_modified_time":"2021-01-13T08:40:13+00:00","og_image":[{"width":1024,"height":608,"url":"https:\/\/i2.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-7.png?fit=1024%2C608&ssl=1","type":"image\/png"}],"author":"Francesco Vastarella","twitter_card":"summary_large_image","twitter_misc":{"Scritto da":"Francesco Vastarella","Tempo di lettura stimato":"9 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blexin.com\/it\/blog\/le-novita-di-c-8-seconda-parte\/#article","isPartOf":{"@id":"https:\/\/blexin.com\/it\/blog\/le-novita-di-c-8-seconda-parte\/"},"author":{"name":"Francesco Vastarella","@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/388dae0ca9df603c88b5e41e29cf2d4d"},"headline":"Le novit\u00e0 di C# 8: seconda parte","datePublished":"2020-02-19T22:45:00+00:00","dateModified":"2021-01-13T08:40:13+00:00","mainEntityOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/le-novita-di-c-8-seconda-parte\/"},"wordCount":1468,"image":{"@id":"https:\/\/blexin.com\/it\/blog\/le-novita-di-c-8-seconda-parte\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-7.png?fit=1024%2C608&ssl=1","keywords":["C#"],"articleSection":["Blog"],"inLanguage":"it-IT"},{"@type":"WebPage","@id":"https:\/\/blexin.com\/it\/blog\/le-novita-di-c-8-seconda-parte\/","url":"https:\/\/blexin.com\/it\/blog\/le-novita-di-c-8-seconda-parte\/","name":"Le novit\u00e0 di C# 8: seconda parte - Blexin","isPartOf":{"@id":"https:\/\/blexin.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/le-novita-di-c-8-seconda-parte\/#primaryimage"},"image":{"@id":"https:\/\/blexin.com\/it\/blog\/le-novita-di-c-8-seconda-parte\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-7.png?fit=1024%2C608&ssl=1","datePublished":"2020-02-19T22:45:00+00:00","dateModified":"2021-01-13T08:40:13+00:00","author":{"@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/388dae0ca9df603c88b5e41e29cf2d4d"},"breadcrumb":{"@id":"https:\/\/blexin.com\/it\/blog\/le-novita-di-c-8-seconda-parte\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blexin.com\/it\/blog\/le-novita-di-c-8-seconda-parte\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/blexin.com\/it\/blog\/le-novita-di-c-8-seconda-parte\/#primaryimage","url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-7.png?fit=1024%2C608&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-7.png?fit=1024%2C608&ssl=1","width":1024,"height":608},{"@type":"BreadcrumbList","@id":"https:\/\/blexin.com\/it\/blog\/le-novita-di-c-8-seconda-parte\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blexin.com\/it\/"},{"@type":"ListItem","position":2,"name":"Le novit\u00e0 di C# 8: seconda parte"}]},{"@type":"WebSite","@id":"https:\/\/blexin.com\/it\/#website","url":"https:\/\/blexin.com\/it\/","name":"Blexin","description":"Con noi \u00e8 semplice","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blexin.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/388dae0ca9df603c88b5e41e29cf2d4d","name":"Francesco Vastarella","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/secure.gravatar.com\/avatar\/3b8deedae8f35372d5fba49f918006fb0a58a2943aff6ae52d3ff188e0c441bb?s=96&d=identicon&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/3b8deedae8f35372d5fba49f918006fb0a58a2943aff6ae52d3ff188e0c441bb?s=96&d=identicon&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3b8deedae8f35372d5fba49f918006fb0a58a2943aff6ae52d3ff188e0c441bb?s=96&d=identicon&r=g","caption":"Francesco Vastarella"},"url":"https:\/\/blexin.com\/it\/author\/francesco-vastarellablexin-com\/"}]}},"jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/pcyUBx-7uI","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-7.png?fit=1024%2C608&ssl=1","_links":{"self":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/28812","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/users\/196716244"}],"replies":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/comments?post=28812"}],"version-history":[{"count":2,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/28812\/revisions"}],"predecessor-version":[{"id":28815,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/28812\/revisions\/28815"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media\/27385"}],"wp:attachment":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media?parent=28812"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/categories?post=28812"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/tags?post=28812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}