Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

C# 10 introduce il costrutto CallerArgumentExpression

CallerArgumentExpression è un costrutto di C# per ottenere, in forma di stringhe, le espressioni usate come argomenti di una funzione.
C# 10 introduce il costrutto CallerArgumentExpression
CallerArgumentExpression è un costrutto di C# per ottenere, in forma di stringhe, le espressioni usate come argomenti di una funzione.
Link copiato negli appunti

La nuova versione di C# 10 porta con sé numerose novità, che aggiungono diverse funzionalità ad un linguaggio già molto ricco. Tra queste, ce n'è una molto interessante, che era già stata oggetto di discussione prima del rilascio di C# 8: la CallerArgumentExpression.

In questo articolo cercheremo di capire di che si tratta, e come può agevolare la programmazione in C#.

CallerArgumentExpression: come funziona su C# 10

A partire da C# 10, è possibile utilizzare la sintassi [CallerArgumentExpression(<nome parametro>)] per richiedere al compilatore di acquisire l'espressione usata per il parametro specificato. Analizziamo questo esempio:

using System.Runtime.CompilerServices;
void Function(int a, int b, [CallerArgumentExpression("a")] string c = "", [CallerArgumentExpression("b")] string d = "")
{
    Console.WriteLine($"Ottenuto {a} dalla espressione '{c}'");
    Console.WriteLine($"Ottenuto {b} dalla espressione '{d}'");
}

Utilizzando la definizione di Function appena vista, a tempo di compilazione ogni chiamata sarà in realtà preprocessata dal compilatore stesso. Supponendo ad esempio di eseguire la funzione con:

int x = 1;
int y = 2;
Function(x, y);

Il codice sarà tradotto come segue:

int x = 1;
int y = 2;
Function(x, y, "x", "y");

Possiamo addirittura immaginare scenari meno ovvi, come il seguente:

Function(int.Parse("2") + 1 + Math.Max(2, 3), 10 - 72);

Con quest'ultimo esempio, il compilatore produrrà il codice seguente:

Function(int.Parse("2") + 1 + Math.Max(2, 3), 10 - 72, "int.Parse(\"2\") + 1 + Math.Max(2, 3)", "10 - 72");

Di conseguenza, l'esecuzione di questa espressione genererà il seguente output:

Ottenuto 3 dalla espressione 'int.Parse("2") + 1 + Math.Max(2, 3)'
Ottenuto -62 dalla espressione '10 - 72'

Usi di CallerArgumentExpression

L'uso più comune di questo costrutto sintattico è chiaramente nell'ambito del testing, e può semplificare il processo di verifica degli argomenti. Inoltre, può essere comodo utilizzarlo per il debugging, agevolando l'implementazione di log più informativi, che includano sia l'output che le espressioni che lo hanno generato.

CallerArgumentExpression non è l'unica novità introdotta in C# 10: chi volesse approfondire, può trovare tutti i dettagli sulle nuove funzionalità direttamente sull'apposita pagina della documentazione ufficiale.

Ti consigliamo anche