Condividi tramite


Istruzioni (Guida per programmatori C#)

Le azioni eseguite da un programma vengono espresse nelle istruzioni . Le azioni comuni includono la dichiarazione di variabili, l'assegnazione di valori, la chiamata di metodi, il ciclo tra raccolte e la diramazione a uno o un altro blocco di codice, a seconda di una determinata condizione. L'ordine in cui le istruzioni vengono eseguite in un programma è denominato flusso di controllo o flusso di esecuzione. Il flusso di controllo può variare ogni volta che viene eseguito un programma, a seconda del modo in cui il programma reagisce all'input ricevuto in fase di esecuzione.

Un'istruzione può essere costituita da una singola riga di codice che termina con un punto e virgola o una serie di istruzioni a riga singola in un blocco. Un blocco di istruzioni è racchiuso tra {} parentesi e può contenere blocchi annidati. Il codice seguente illustra due esempi di istruzioni a riga singola e un blocco di istruzioni su più righe:

    public static void Main()
    {
        // Declaration statement.
        int counter;

        // Assignment statement.
        counter = 1;

        // Error! This is an expression, not an expression statement.
        // counter + 1;

        // Declaration statements with initializers are functionally
        // equivalent to  declaration statement followed by assignment statement:
        int[] radii = [15, 32, 108, 74, 9]; // Declare and initialize an array.
        const double pi = 3.14159; // Declare and initialize  constant.

        // foreach statement block that contains multiple statements.
        foreach (int radius in radii)
        {
            // Declaration statement with initializer.
            double circumference = pi * (2 * radius);

            // Expression statement (method invocation). A single-line
            // statement can span multiple text lines because line breaks
            // are treated as white space, which is ignored by the compiler.
            System.Console.WriteLine($"Radius of circle #{counter} is {radius}. Circumference = {circumference:N2}");

            // Expression statement (postfix increment).
            counter++;
        } // End of foreach statement block
    } // End of Main method body.
} // End of SimpleStatements class.
/*
   Output:
    Radius of circle #1 = 15. Circumference = 94.25
    Radius of circle #2 = 32. Circumference = 201.06
    Radius of circle #3 = 108. Circumference = 678.58
    Radius of circle #4 = 74. Circumference = 464.96
    Radius of circle #5 = 9. Circumference = 56.55
*/

Tipologie di dichiarazioni

La tabella seguente elenca i vari tipi di istruzioni in C# e le relative parole chiave associate, con collegamenti ad argomenti che includono altre informazioni:

Categoria Parole chiave/note C#
Istruzioni di dichiarazione Un'istruzione di dichiarazione introduce una nuova variabile o costante. Una dichiarazione di variabile può facoltativamente assegnare un valore alla variabile. In una dichiarazione costante, l'assegnazione è obbligatoria.
Istruzioni di espressione Le istruzioni di espressione che calcolano un valore devono archiviare il valore in una variabile.
Istruzioni di selezione Le istruzioni di selezione consentono di diramare verso sezioni di codice diverse, a seconda di una o più condizioni specificate. Per altre informazioni, vedere gli argomenti seguenti:
Istruzioni di iterazione Le istruzioni di iterazione consentono di scorrere raccolte come matrici o di eseguire ripetutamente lo stesso set di istruzioni fino a quando non viene soddisfatta una condizione specificata. Per altre informazioni, vedere gli argomenti seguenti:
Istruzioni di salto Le istruzioni di salto trasferiscono il controllo a un'altra sezione del codice. Per altre informazioni, vedere gli argomenti seguenti:
Istruzioni di gestione delle eccezioni Le istruzioni di gestione delle eccezioni consentono di gestire correttamente le condizioni eccezionali che si verificano in fase di esecuzione. Per altre informazioni, vedere gli argomenti seguenti:
checked e unchecked Il checked e unchecked istruzioni permettono di specificare se le operazioni numeriche di tipo integrale possono causare un overflow quando il risultato viene archiviato in una variabile troppo piccola per contenere il valore risultante.
Istruzione await Se si contrassegna un metodo con il modificatore async , è possibile usare l'operatore await nel metodo. Quando il controllo raggiunge un'espressione await nel metodo asincrono, il controllo torna al chiamante e lo stato del metodo viene sospeso fino al completamento dell'attività attesa. Una volta completata l'attività, l'esecuzione del metodo può riprendere.

Per un esempio semplice, vedere la sezione "Metodi asincroni" di Metodi. Per altre informazioni, vedere Programmazione asincrona con async e await.
Istruzione yield return Un iteratore esegue un'iterazione personalizzata su una raccolta, ad esempio un elenco o una matrice. Un iteratore usa l'istruzione yield return per restituire un elemento per volta. Quando viene raggiunta un'istruzione yield return , viene memorizzata la posizione corrente nel codice. L'esecuzione viene riavviata da tale posizione quando l'iteratore viene chiamato la volta successiva.

Per altre informazioni, vedere Iteratori.
Dichiarazione fixed L'istruzione fissa impedisce al Garbage Collector di spostare una variabile mobile. Per altre informazioni, vedere Fixed.
Istruzione lock L'istruzione lock consente di limitare l'accesso ai blocchi di codice a un solo thread alla volta. Per ulteriori informazioni, vedere lock.
Istruzioni etichettate È possibile assegnare a un'istruzione un'etichetta e quindi usare la parola chiave goto per passare all'istruzione etichettata. Vedere l'esempio nella riga seguente.
Dichiarazione vuota L'istruzione vuota è costituita da un singolo punto e virgola. Non esegue alcuna operazione e può essere usata in posizioni in cui è necessaria un'istruzione, ma non è necessario eseguire alcuna azione.

Dichiarazioni

Il codice seguente mostra esempi di dichiarazioni di variabili con e senza un'assegnazione iniziale e una dichiarazione costante con l'inizializzazione necessaria.

// Variable declaration statements.
double area;
double radius = 2;

// Constant declaration statement.
const double pi = 3.14159;

Istruzioni di espressione

Il codice seguente mostra esempi di istruzioni di espressione, tra cui assegnazione, creazione di oggetti con assegnazione e chiamata al metodo.

// Expression statement (assignment).
area = 3.14 * (radius * radius);

// Error. Not  statement because no assignment:
//circ * 2;

// Expression statement (method invocation).
System.Console.WriteLine();

// Expression statement (new object creation).
System.Collections.Generic.List<string> strings =
    new System.Collections.Generic.List<string>();

Istruzione vuota

Gli esempi seguenti illustrano due usi per un'istruzione vuota:

void ProcessMessages()
{
    while (ProcessMessage())
        ; // Statement needed here.
}

void F()
{
    //...
    if (done) goto exit;
//...
exit:
    ; // Statement needed here.
}

Istruzioni incorporate

Alcune istruzioni, ad esempio, le istruzioni di iterazione, hanno sempre un'istruzione incorporata che le segue. Questa istruzione incorporata può essere una singola istruzione o più istruzioni racchiuse tra {} parentesi quadre in un blocco di istruzioni. Anche le istruzioni a riga singola incapsulate possono essere racchiuse tra tag {}, come mostrato nell'esempio seguente:

// Recommended style. Embedded statement in  block.
foreach (string s in System.IO.Directory.GetDirectories(
                        System.Environment.CurrentDirectory))
{
    System.Console.WriteLine(s);
}

// Not recommended.
foreach (string s in System.IO.Directory.GetDirectories(
                        System.Environment.CurrentDirectory))
    System.Console.WriteLine(s);

Un'istruzione incorporata non racchiusa tra {} parentesi quadre non può essere un'istruzione di dichiarazione o un'istruzione etichettata. Questa operazione è illustrata nell'esempio seguente:

if(pointB == true)
    //Error CS1023:
    int radius = 5;

Inserire l'istruzione incorporata in un blocco per correggere l'errore:

if (b == true)
{
    // OK:
    System.DateTime d = System.DateTime.Now;
    System.Console.WriteLine(d.ToLongDateString());
}

Blocchi di istruzioni annidati

I blocchi di istruzioni possono essere annidati, come illustrato nel codice seguente:

foreach (string s in System.IO.Directory.GetDirectories(
    System.Environment.CurrentDirectory))
{
    if (s.StartsWith("CSharp"))
    {
        if (s.EndsWith("TempFolder"))
        {
            return s;
        }
    }
}
return "Not found.";

Istruzioni non raggiungibili

Se il compilatore determina che il flusso di controllo non può mai raggiungere una determinata istruzione in nessun caso, genererà l'avviso CS0162, come illustrato nell'esempio seguente:

// An over-simplified example of unreachable code.
const int val = 5;
if (val < 4)
{
    System.Console.WriteLine("I'll never write anything."); //CS0162
}

Specifiche del linguaggio C#

Per altre informazioni, vedere la sezione Istruzioni della specifica del linguaggio C#.

Vedere anche