{"id":22507,"date":"2021-11-16T21:29:06","date_gmt":"2021-11-16T20:29:06","guid":{"rendered":"https:\/\/www.nycwebdesign.eu\/webdesign\/c-10-introduce-il-costrutto-callerargumentexpression\/"},"modified":"2021-11-16T21:29:06","modified_gmt":"2021-11-16T20:29:06","slug":"c-10-introduce-il-costrutto-callerargumentexpression","status":"publish","type":"post","link":"https:\/\/www.nycwebdesign.eu\/webdesign\/c-10-introduce-il-costrutto-callerargumentexpression\/","title":{"rendered":"C# 10 introduce il costrutto CallerArgumentExpression"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div>\n<p>La nuova versione di <a href=\"https:\/\/www.html.it\/guide\/guida-c1\/\">C#<\/a> <strong>10<\/strong> porta con s\u00e9 numerose novit\u00e0, che aggiungono diverse funzionalit\u00e0 ad un linguaggio gi\u00e0 molto ricco. Tra queste, ce n\u2019\u00e8 una molto interessante, che era gi\u00e0 stata oggetto di discussione prima del rilascio di C# 8: la <strong>CallerArgumentExpression<\/strong>.<\/p>\n<p>In questo articolo cercheremo di capire di che si tratta, e come pu\u00f2 agevolare la programmazione in C#.<\/p>\n<h2>CallerArgumentExpression: come funziona su C# 10<\/h2>\n<p>A partire da C# 10, \u00e8 possibile utilizzare la sintassi <code>[CallerArgumentExpression(&lt;nome parametro&gt;)]<\/code> per richiedere al compilatore di acquisire l\u2019espressione usata per il parametro specificato. Analizziamo questo esempio:<\/p>\n<pre><code class=\"language-csharp\">\nusing System.Runtime.CompilerServices;\nvoid Function(int a, int b, [CallerArgumentExpression(\"a\")] string c = \"\", [CallerArgumentExpression(\"b\")] string d = \"\")\n{\n    Console.WriteLine($\"Ottenuto {a} dalla espressione '{c}'\");\n    Console.WriteLine($\"Ottenuto {b} dalla espressione '{d}'\");\n}\n<\/code><\/pre>\n<p>Utilizzando la definizione di <code>Function<\/code> appena vista, a tempo di compilazione ogni chiamata sar\u00e0 in realt\u00e0 preprocessata dal compilatore stesso. Supponendo ad esempio di eseguire la funzione con:<\/p>\n<pre><code class=\"language-csharp\">\nint x = 1;\nint y = 2;\nFunction(x, y);\n<\/code><\/pre>\n<p>Il codice sar\u00e0 tradotto come segue:<\/p>\n<pre><code class=\"language-csharp\">\nint x = 1;\nint y = 2;\nFunction(x, y, \"x\", \"y\");\n<\/code><\/pre>\n<p>Possiamo addirittura immaginare scenari meno ovvi, come il seguente:<\/p>\n<pre><code class=\"language-csharp\">\nFunction(int.Parse(\"2\") + 1 + Math.Max(2, 3), 10 - 72);\n<\/code><\/pre>\n<p>Con quest\u2019ultimo esempio, il compilatore produrr\u00e0 il codice seguente:<\/p>\n<pre><code class=\"language-csharp\">\nFunction(int.Parse(\"2\") + 1 + Math.Max(2, 3), 10 - 72, \"int.Parse(\"2\") + 1 + Math.Max(2, 3)\", \"10 - 72\");\n<\/code><\/pre>\n<p>Di conseguenza, l\u2019esecuzione di questa espressione generer\u00e0 il seguente output:<\/p>\n<pre><code class=\"language-markup\">\nOttenuto 3 dalla espressione 'int.Parse(\"2\") + 1 + Math.Max(2, 3)'\nOttenuto -62 dalla espressione '10 - 72'\n<\/code><\/pre>\n<h2>Usi di CallerArgumentExpression<\/h2>\n<p>L\u2019uso pi\u00f9 comune di questo costrutto sintattico \u00e8 chiaramente nell\u2019ambito del <strong>testing<\/strong>, e pu\u00f2 semplificare il processo di verifica degli argomenti. Inoltre, pu\u00f2 essere comodo utilizzarlo per il <strong>debugging<\/strong>, agevolando l\u2019implementazione di log pi\u00f9 informativi, che includano sia l\u2019output che le espressioni che lo hanno generato.<\/p>\n<p><code>CallerArgumentExpression<\/code> non \u00e8 l\u2019unica novit\u00e0 introdotta in C# 10: chi volesse approfondire, pu\u00f2 trovare tutti i dettagli sulle nuove funzionalit\u00e0 direttamente sull\u2019<a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/csharp\/whats-new\/csharp-10\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">apposita pagina della documentazione ufficiale<\/a>.<\/p>\n<p><em>Fonte<\/em>: <a href=\"https:\/\/weblogs.asp.net\/dixin\/csharp-10-new-feature-callerargumentexpression-argument-check-and-more\" class=\"text-link text-link--special\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><span class=\"underline\">Dixin&#8217;s Blog<\/span><i class=\"ico-external\"\/><\/a><\/p>\n<\/div>\n<p><br \/>\n<br \/><a href=\"https:\/\/www.html.it\/16\/11\/2021\/c-sharp-10-callerargumentexpression\/\">Source link <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>La nuova versione di C# 10 porta con s\u00e9 numerose novit\u00e0, che aggiungono diverse funzionalit\u00e0 ad un linguaggio gi\u00e0 molto ricco. Tra queste, ce n\u2019\u00e8 una molto interessante, che era gi\u00e0 stata oggetto di discussione prima del rilascio di C# 8: la CallerArgumentExpression. In questo articolo cercheremo di capire di che si tratta, e come&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_s2mail":""},"categories":[37],"tags":[],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.13 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>C# 10 introduce il costrutto CallerArgumentExpression - AGENZIA WEB Italia<\/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:\/\/www.nycwebdesign.eu\/webdesign\/c-10-introduce-il-costrutto-callerargumentexpression\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C# 10 introduce il costrutto CallerArgumentExpression - AGENZIA WEB Italia\" \/>\n<meta property=\"og:description\" content=\"La nuova versione di C# 10 porta con s\u00e9 numerose novit\u00e0, che aggiungono diverse funzionalit\u00e0 ad un linguaggio gi\u00e0 molto ricco. Tra queste, ce n\u2019\u00e8 una molto interessante, che era gi\u00e0 stata oggetto di discussione prima del rilascio di C# 8: la CallerArgumentExpression. In questo articolo cercheremo di capire di che si tratta, e come...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.nycwebdesign.eu\/webdesign\/c-10-introduce-il-costrutto-callerargumentexpression\/\" \/>\n<meta property=\"og:site_name\" content=\"AGENZIA WEB Italia\" \/>\n<meta property=\"article:published_time\" content=\"2021-11-16T20:29:06+00:00\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/c-10-introduce-il-costrutto-callerargumentexpression\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/c-10-introduce-il-costrutto-callerargumentexpression\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/person\/c0748e23499fac2fd73b79d1379fdf42\"},\"headline\":\"C# 10 introduce il costrutto CallerArgumentExpression\",\"datePublished\":\"2021-11-16T20:29:06+00:00\",\"dateModified\":\"2021-11-16T20:29:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/c-10-introduce-il-costrutto-callerargumentexpression\/\"},\"wordCount\":240,\"publisher\":{\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#organization\"},\"articleSection\":[\"News\"],\"inLanguage\":\"it-IT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/c-10-introduce-il-costrutto-callerargumentexpression\/\",\"url\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/c-10-introduce-il-costrutto-callerargumentexpression\/\",\"name\":\"C# 10 introduce il costrutto CallerArgumentExpression - AGENZIA WEB Italia\",\"isPartOf\":{\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#website\"},\"datePublished\":\"2021-11-16T20:29:06+00:00\",\"dateModified\":\"2021-11-16T20:29:06+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/c-10-introduce-il-costrutto-callerargumentexpression\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.nycwebdesign.eu\/webdesign\/c-10-introduce-il-costrutto-callerargumentexpression\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/c-10-introduce-il-costrutto-callerargumentexpression\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C# 10 introduce il costrutto CallerArgumentExpression\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#website\",\"url\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/\",\"name\":\"AGENZIA WEB Italia\",\"description\":\"Web design Web agency Italia\",\"publisher\":{\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#organization\",\"name\":\"Multimedia Web\",\"url\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-content\/uploads\/2016\/05\/multimediaweb1.png\",\"contentUrl\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-content\/uploads\/2016\/05\/multimediaweb1.png\",\"width\":200,\"height\":57,\"caption\":\"Multimedia Web\"},\"image\":{\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/person\/c0748e23499fac2fd73b79d1379fdf42\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/991cd68bbfd6f946517378a63fc3a1f7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/991cd68bbfd6f946517378a63fc3a1f7?s=96&d=mm&r=g\",\"caption\":\"admin\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"C# 10 introduce il costrutto CallerArgumentExpression - AGENZIA WEB Italia","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:\/\/www.nycwebdesign.eu\/webdesign\/c-10-introduce-il-costrutto-callerargumentexpression\/","og_locale":"it_IT","og_type":"article","og_title":"C# 10 introduce il costrutto CallerArgumentExpression - AGENZIA WEB Italia","og_description":"La nuova versione di C# 10 porta con s\u00e9 numerose novit\u00e0, che aggiungono diverse funzionalit\u00e0 ad un linguaggio gi\u00e0 molto ricco. Tra queste, ce n\u2019\u00e8 una molto interessante, che era gi\u00e0 stata oggetto di discussione prima del rilascio di C# 8: la CallerArgumentExpression. In questo articolo cercheremo di capire di che si tratta, e come...","og_url":"https:\/\/www.nycwebdesign.eu\/webdesign\/c-10-introduce-il-costrutto-callerargumentexpression\/","og_site_name":"AGENZIA WEB Italia","article_published_time":"2021-11-16T20:29:06+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Scritto da":"admin","Tempo di lettura stimato":"2 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/c-10-introduce-il-costrutto-callerargumentexpression\/#article","isPartOf":{"@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/c-10-introduce-il-costrutto-callerargumentexpression\/"},"author":{"name":"admin","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/person\/c0748e23499fac2fd73b79d1379fdf42"},"headline":"C# 10 introduce il costrutto CallerArgumentExpression","datePublished":"2021-11-16T20:29:06+00:00","dateModified":"2021-11-16T20:29:06+00:00","mainEntityOfPage":{"@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/c-10-introduce-il-costrutto-callerargumentexpression\/"},"wordCount":240,"publisher":{"@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#organization"},"articleSection":["News"],"inLanguage":"it-IT"},{"@type":"WebPage","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/c-10-introduce-il-costrutto-callerargumentexpression\/","url":"https:\/\/www.nycwebdesign.eu\/webdesign\/c-10-introduce-il-costrutto-callerargumentexpression\/","name":"C# 10 introduce il costrutto CallerArgumentExpression - AGENZIA WEB Italia","isPartOf":{"@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#website"},"datePublished":"2021-11-16T20:29:06+00:00","dateModified":"2021-11-16T20:29:06+00:00","breadcrumb":{"@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/c-10-introduce-il-costrutto-callerargumentexpression\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.nycwebdesign.eu\/webdesign\/c-10-introduce-il-costrutto-callerargumentexpression\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/c-10-introduce-il-costrutto-callerargumentexpression\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.nycwebdesign.eu\/webdesign\/"},{"@type":"ListItem","position":2,"name":"C# 10 introduce il costrutto CallerArgumentExpression"}]},{"@type":"WebSite","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#website","url":"https:\/\/www.nycwebdesign.eu\/webdesign\/","name":"AGENZIA WEB Italia","description":"Web design Web agency Italia","publisher":{"@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.nycwebdesign.eu\/webdesign\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#organization","name":"Multimedia Web","url":"https:\/\/www.nycwebdesign.eu\/webdesign\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/logo\/image\/","url":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-content\/uploads\/2016\/05\/multimediaweb1.png","contentUrl":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-content\/uploads\/2016\/05\/multimediaweb1.png","width":200,"height":57,"caption":"Multimedia Web"},"image":{"@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/person\/c0748e23499fac2fd73b79d1379fdf42","name":"admin","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/991cd68bbfd6f946517378a63fc3a1f7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/991cd68bbfd6f946517378a63fc3a1f7?s=96&d=mm&r=g","caption":"admin"}}]}},"_links":{"self":[{"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/posts\/22507"}],"collection":[{"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/comments?post=22507"}],"version-history":[{"count":0,"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/posts\/22507\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/media?parent=22507"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/categories?post=22507"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/tags?post=22507"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}