Inizializzazione multipla nel ciclo 'for' di C#

Inizializzazione multipla nel ciclo 'for' di C#

Non si può fare. Metti una delle dichiarazioni prima del ciclo:

MyClass i = 0;
for (int j = 1; j < 3; j++, i++)

O per simmetria, entrambi:

MyClass i = 0;
int j = 1;
for (; j < 3; j++, i++)

È anche possibile che una delle variabili sia più primaria dell'altra. In tal caso potrebbe essere più ordinato avere una variabile di ciclo e gestire l'altra separatamente, in questo modo:

MyClass i = 0;
for (int j = 0; j < 3; j++)
{
    ...
    i++;
}

Nota che se i e j erano dello stesso tipo, quindi puoi dichiararli entrambi nel ciclo for:

for (int i = 0, j = 1; j < 3; j++, i++)

Ovviamente si PUÒ fare. Usa la dinamica parola chiave:

public static void Main(string[] args) {
    for (dynamic x = 0, y = new MyClass { a = 20, b = 30 }; x < 100; x++, y.a++, y.b--) {
        Console.Write("X=" + x + " (" + x.GetType() + "\n" +
                      "Y.a=" + y.a + ",Y.b=" + y.b + " (" + y.GetType() + "\n");
     }
}

class MyClass {
    public int a = 0, b = 0;
}

Buona giornata!


Sì, si può fare. Puoi inizializzare variabili di tipo diverso all'interno di un'istruzione for, ma non puoi dichiarare variabili di diverso tipo all'interno di un'istruzione for. Per inizializzare variabili di tipo diverso all'interno di un'istruzione for devi dichiarare tutti i tipi prima del ciclo for. Ad esempio:

int xx;
string yy;
for(xx=0, yy=""; xx<10; xx++)
    {
    ....
    }

[EDIT] Aggiunta di ulteriori informazioni per completezza. Questo va oltre ciò che l'OP ha richiesto, ma può essere utile per altri. È semplice inizializzare variabili dello stesso tipo in un ciclo for, basta separare l'inizializzazione con virgole. Puoi anche modificare più variabili nella terza sezione. Non puoi avere più sezioni separate da virgole nella seconda sezione di confronto, ma puoi usare &&|| e ! per creare una sezione booleana complessa basata su più variabili.

for(int i=0, j=0, k=99; i<10 && k<200; i++, j++, k += 2)

Tuttavia, non è una buona pratica fare un'affermazione così complessa da rendere difficile capire cosa sta succedendo.