Sei sulla pagina 1di 16

Il foreach è un for che non ha bisogno che tu gli dia il numero di iterazioni da fare

Tu gli dai (come vedrai) un array, ad esempio, e lui ti fa tante iterazioni quanti sono gli elementi di questo
array

Ad esempio, hai un array di 100 elementi

Se dai questo array al foreach, lui ti farà 100 iterazioni

Ora, la sintassi

foreach(string filename in openfile.FileNames)

Questo è un utilizzo classico Che abbiamo anche visto nelle lezioni iniziali di C# che avevamo iniziato

openfile.FileNames cos'è?

E' un semplice array

openfile.FileNames è un array

Un array che contiene i nomi (percorso incluso) dei file selezionati dall'utente

Quindi è un array di che tipo?

(int, ecc.)

Baldr 36, [20.10.19 19:01]

foreach(string filename in openfile.FileNames)

Baldr 36, [20.10.19 19:03]

Quella nella parentesi è una sintassi che dovrai imparare

Baldr 36, [20.10.19 19:04]

Gli elementi sono tre:

Baldr 36, [20.10.19 19:04]

string filename

Baldr 36, [20.10.19 19:04]

in

Baldr 36, [20.10.19 19:04]

openfile.FileNames
Baldr 36, [20.10.19 19:04]

in è fisso, come new per le dichiarazioni delle altre lezioni

Baldr 36, [20.10.19 19:05]

Il terzo elemento (in questo caso openfile.FileNames) è sempre (o quasi) un array

Baldr 36, [20.10.19 19:07]

foreach scorre tra gli elementi dell'array, dal primo all'ultimo

Baldr 36, [20.10.19 19:07]

Nello scorrere gli elementi, li legge

Baldr 36, [20.10.19 19:08]

E dove li mette? Nel primo elemento, che è una variabile

Baldr 36, [20.10.19 19:09]

Questa variabile (string filename) potrai usarla all'interno (e solo all'interno) del foreach, e ad ogni ciclo
assumerà il valore dell'elemento corrente dell'array

Baldr 36, [20.10.19 19:09]

Primo giro? filename è uguale a openfile.FileNames[0]

Baldr 36, [20.10.19 19:09]

Secondo giro? filename è uguale a openfile.FileNames[1]

Baldr 36, [20.10.19 19:10]

Nota che il tipo di questa variabile (string, in questo caso) dipende unicamente dall'array che metti come
terzo elemento del foreach

Baldr 36, [20.10.19 19:10]

openfile.FileNames è un array di stringhe, quindi il primo elemento del foreach sarà una variabile di tipo
string
Baldr 36, [20.10.19 19:10]

Fosse stato un array di byte, come il buffer di ieri

Baldr 36, [20.10.19 19:11]

Il primo elemento del foreach sarebbe stata una variabile di tipo byte

Baldr 36, [20.10.19 19:19]

Un'altra cosa. Dopo aver letto e capito tutto, sappi che non c'è bisogno di dichiarare precedentemente
questa variabile

Baldr 36, [20.10.19 19:20]

In questo caso foreach la dichiara "automaticamente"

Baldr 36, [20.10.19 19:26]

byte[] buffer = new byte [100];

foreach (byte prova in buffer)

Baldr 36, [20.10.19 19:38]

Sì, assume il valore dell'elemento corrente dell'array (buffer[0] al primo giro, poi buffer [1] al secondo, e
così via)

Baldr 36, [20.10.19 19:38]

A ogni giro

Baldr 36, [20.10.19 19:38]

Questa variabile puoi usarla all'interno del foreach

Baldr 36, [20.10.19 19:40]

prova è la variabile

Baldr 36, [20.10.19 19:40]


Che ad ogni giro

Baldr 36, [20.10.19 19:41]

Assume il valore dell'elemento corrente dell'array

Baldr 36, [20.10.19 19:44]

Primo giro, prova sarà uguale a buffer[0]

Baldr 36, [20.10.19 19:45]

Secondo giro, prova sarà uguale a buffer[1]

Baldr 36, [20.10.19 19:46]

Ora spieghiamo il while

Baldr 36, [20.10.19 19:47]

Il while è il ciclo più semplice

Baldr 36, [20.10.19 19:47]

Quello che fa è iterare, eseguendo le istruzioni al suo interno

Baldr 36, [20.10.19 19:47]

Finché la condizione è vera

Baldr 36, [20.10.19 19:48]

int a = 100;

Baldr 36, [20.10.19 19:48]

while(a > 50)

Baldr 36, [20.10.19 19:48]

{
Baldr 36, [20.10.19 19:48]

Console.WriteLine("Sorakairi è un falso fan");

Baldr 36, [20.10.19 19:49]

Baldr 36, [20.10.19 19:49]

La condizione del while è che a sia maggiore di 50

Baldr 36, [20.10.19 19:49]

Se lo è, itera

Baldr 36, [20.10.19 19:50]

Altrimenti, non itera e non si entra neanche nel ciclo

Baldr 36, [20.10.19 19:50]

In questo caso, l'iterazione andrebbe avanti all'infinito

Baldr 36, [20.10.19 19:50]

Per questo spesso all'interno del while si fa cambiare il valore di a, ad un certo punto

Baldr 36, [20.10.19 19:58]

Ad esempio, usavo un while per cancellare i pmo

Baldr 36, [20.10.19 19:58]

Cercavo la firma nel file

Baldr 36, [20.10.19 19:59]

Quando la trovavo, cancellavo il file, E uscivo dal ciclo

Baldr 36, [20.10.19 19:59]

Ad esempio, qui abbiamo a > 50


Baldr 36, [20.10.19 19:59]

Sì, perché avevo finito

Baldr 36, [20.10.19 19:59]

Una volta che trovo la firma, cancello e si va oltre

Baldr 36, [20.10.19 20:02]

[In risposta a Baldr 36]

Quando trovavo la firma, cancellavo il file E scrivevo a = 49, per adattarmi all'esempio

Baldr 36, [20.10.19 20:02]

Così la condizione non era più vera

Baldr 36, [20.10.19 20:02]

Oppure, se il file non era un pmo

Baldr 36, [20.10.19 20:03]

Una volta arrivato alla fine del file, scrivevo a = 49 senza cancellarlo

Baldr 36, [20.10.19 20:03]

Tutto ciò attraverso degli if, chiaramente

Baldr 36, [20.10.19 20:46]

Il while accetta una condizione tra parentesi

Baldr 36, [20.10.19 20:47]

E ripete il pezzo di codice tra parentesi graffe finché quella condizione è vera

Baldr 36, [20.10.19 20:47]

while (a > 50)


Baldr 36, [20.10.19 20:48]

Il ciclo si ripete finché a è maggiore di 50

Baldr 36, [20.10.19 20:50]

Il while è semplice. Semplicemente ripete finché la condizione è vera

Baldr 36, [20.10.19 20:50]

Se la condizione è falsa

Baldr 36, [20.10.19 20:50]

Si esce dal ciclo

Baldr 36, [20.10.19 20:56]

int i = 0;

while (a > 50)

Console.WriteLine("Prova");

if (i == 100)

a = 0;

i++;

Baldr 36, [20.10.19 20:56]

Cosa succede, secondo te?

Baldr 36, [20.10.19 21:08]

Iniziamo con int a = 100;

Baldr 36, [20.10.19 21:09]

int i = 0, a = 100;

while (a > 50)


{

Console.WriteLine("Prova");

if (i == 100)

a = 0;

i++;

Alessandro Solinas, [20.10.19 21:11]

in pratica mi sta dicendo che se i assume il valore di 100 a assume 0

Alessandro Solinas, [20.10.19 21:11]

e quindi non stampa nulla

Baldr 36, [20.10.19 21:11]

E quindi esce dal ciclo

Baldr 36, [20.10.19 21:11]

Su questo ci siamo

Baldr 36, [20.10.19 21:14]

Sì, ma la cosa fondamentale è che esce dal ciclo

Baldr 36, [20.10.19 21:14]

Per questo non stampa più

Baldr 36, [20.10.19 21:14]

E quando esce dal ciclo

Baldr 36, [20.10.19 21:14]

Lo fa una volta per tutte


Baldr 36, [20.10.19 21:14]

Il codice prosegue

Baldr 36, [20.10.19 21:18]

Quindi dal while si esce così, rendendo falsa la condizione

Baldr 36, [20.10.19 21:22]

Al for avrò messo una seconda condizione in questa forma:

Baldr 36, [20.10.19 21:22]

i < *numero dei file*

Baldr 36, [20.10.19 21:22]

Quando tutti i file sono stati esaminati

Baldr 36, [20.10.19 21:22]

Il ciclo finisce

Baldr 36, [20.10.19 21:23]

E si va oltre

Baldr 36, [20.10.19 21:25]

Ora conosci for, foreach e while.

Baldr 36, [20.10.19 21:25]

Devi sapere che esiste un'istruzione in grado di farti automaticamente uscire da un ciclo, in qualsiasi
momento e subito

Baldr 36, [20.10.19 21:25]

Si tratta del break

Baldr 36, [20.10.19 21:28]


int i = 0, a = 100;

while (a > 50)

Console.WriteLine("Prova");

if (i == 100)

break;

i++;

Baldr 36, [20.10.19 21:29]

Quando i è uguale a 100, si esce dal ciclo

Baldr 36, [20.10.19 21:29]

Indipendentemente dal fatto che a sia ancora a > 50, cioè dal fatto che la condizione sia ancora vera

Baldr 36, [20.10.19 21:29]

Si esce dal ciclo e basta

Baldr 36, [20.10.19 21:29]

E vale per tutti i cicli

Baldr 36, [20.10.19 21:29]

Non solo per while

Baldr 36, [20.10.19 21:30]

Ora, l'ultimo ciclo rimanente è il do while, che in realtà non è un nuovo tipo di ciclo

Baldr 36, [20.10.19 21:30]

Con il while, può succedere di non entrare mai nel ciclo

Baldr 36, [20.10.19 21:31]


Se a fosse stato minore di 50 all'inizio, ad esempio

Baldr 36, [20.10.19 21:32]

Nel ciclo non ci entravi nemmeno una volta

Baldr 36, [20.10.19 21:33]

Ora, il do while appare così

Baldr 36, [20.10.19 21:34]

int i = 0, a = 50;

while (a > 50)

Console.WriteLine("Prova");

if (i == 100)

break;

i++;

Baldr 36, [20.10.19 21:34]

Così non entrerà mai nel while

Baldr 36, [20.10.19 21:36]

int i = 0, a = 100;

do

Console.WriteLine("Prova");

if (i == 100)

break;

i++;

}
while (a > 50);

Baldr 36, [20.10.19 21:36]

Il do si presenta come un altro blocco di istruzioni tra parentesi graffe

Baldr 36, [20.10.19 21:36]

Senza parentesi o cose dopo, solo do

Baldr 36, [20.10.19 21:37]

Il do è sempre accoppiato a un while

Baldr 36, [20.10.19 21:37]

Qui cosa succede?

Baldr 36, [20.10.19 21:37]

Che il codice a essere ripetuto, iterato

Baldr 36, [20.10.19 21:37]

Sarà quello che si trova nel do

Baldr 36, [20.10.19 21:37]

Qui il while agisce solo per controllare la condizione

Baldr 36, [20.10.19 21:38]

Non possiede condizioni, ma è condizionato dal while successivo

Baldr 36, [20.10.19 21:38]

Se la condizione diventa falsa

Baldr 36, [20.10.19 21:38]

a = 0, ad esempio

Baldr 36, [20.10.19 21:38]


Il while se ne accorge, e il codice va oltre

Baldr 36, [20.10.19 21:39]

Come se il while desse il suo blocco di codice in prestito al do

Baldr 36, [20.10.19 21:39]

Il while si comporta come prima

Baldr 36, [20.10.19 21:39]

Ma il suo blocco di codice si trova dentro il do

Baldr 36, [20.10.19 21:40]

Detto così sembra inutile, ma c'è uno scopo

Baldr 36, [20.10.19 21:40]

Essenzialmente non cambia nulla dal while

Baldr 36, [20.10.19 21:41]

Solo che il blocco di codice del while è ora dentro il do

Baldr 36, [20.10.19 21:45]

Il do non è separato dal while

Baldr 36, [20.10.19 21:45]

while

Baldr 36, [20.10.19 21:45]

Baldr 36, [20.10.19 21:45]

codice
Baldr 36, [20.10.19 21:45]

Baldr 36, [20.10.19 21:45]

do

Baldr 36, [20.10.19 21:45]

Baldr 36, [20.10.19 21:45]

codice

Baldr 36, [20.10.19 21:45]

Baldr 36, [20.10.19 21:45]

while;

Baldr 36, [20.10.19 21:46]

Il codice si trova prima dentro il while, poi dentro il do

Baldr 36, [20.10.19 21:46]

Ma quando il codice è dentro il do

Baldr 36, [20.10.19 21:46]

E come se fosse dentro il while

Baldr 36, [20.10.19 21:46]

Non cambia davvero niente

Baldr 36, [20.10.19 21:47]

Bene, la differenza chiave è una


Baldr 36, [20.10.19 21:47]

In un while normale:

Baldr 36, [20.10.19 21:47]

1. Controllo condizione

Baldr 36, [20.10.19 21:47]

2. Esecuzione codice

Baldr 36, [20.10.19 21:48]

1. Controllo condizione

Baldr 36, [20.10.19 21:48]

E così via

Baldr 36, [20.10.19 21:48]

Cioè, la prima cosa che avviene è il controllo della condizione

Baldr 36, [20.10.19 21:48]

Quindi è possibile non entrare mai

Baldr 36, [20.10.19 21:48]

Dato che se da subito la condizione è falsa

Baldr 36, [20.10.19 21:48]

A eseguire il codice non arrivi nemmeno una volta

Baldr 36, [20.10.19 21:49]

Ora, il do while cosa fa? Inverte quest'ordine.

Baldr 36, [20.10.19 21:49]


Con il do while, si avrà:

Baldr 36, [20.10.19 21:49]

1. Esecuzione codice

Baldr 36, [20.10.19 21:49]

2. Controllo condizione

Baldr 36, [20.10.19 21:49]

1. Esecuzione codice

Baldr 36, [20.10.19 21:49]

E così via

Baldr 36, [20.10.19 21:49]

Succede che prima si esegue il codice

Baldr 36, [20.10.19 21:50]

E poi si controlla la condizione

Baldr 36, [20.10.19 21:50]

E questo cosa ti garantisce?

Baldr 36, [20.10.19 21:50]

Ti garantisce che il codice verrà eseguito almeno una volta

Baldr 36, [20.10.19 21:50]

Perché il primo controllo avviene dopo la prima esecuzione

Baldr 36, [20.10.19 21:51]

Ed è questa la ragione per cui viene usato il do while