foreach_strongtyped.cs

using sys = System;
using sysCols = System.Collections;
using sysSCols = System.Collections.Specialized;

public class MainApplication{
  public static void Main(){
    // Costruisco un vettore di stringhe con cui popolare le collezioni
    string battiato = "tesserò i tuoi capelli come trame di un canto," +
                      "conosco le leggi del mondo e te ne farò dono," + 
                      "supererò le correnti gravitazionali " +
                      "lo spazio e la luce per non farti invecchiare," +
                      "ti salverò da ogni malinconia perchè sei un essere speciale " +
                      "ed io avrò cura di te"; // Franco Battiato - La cura
    string[] parole = battiato.Split(new char[] {' ', ','}); 

    // Istanzio un ArrayList che è una collezione generica debolmente tipizzata
    // e la popolo con elementi di tipo String.
    sysCols.ArrayList myArrayList = new sysCols.ArrayList(parole);

    // La seguente linea di codice aggiunge un elemento di tipo Char[] alla
    // collezione. Scommentandola, la compilazione andrà a buon fine. Solo
    // durante l'esecuzione il successivo foreach andrà in errore iterando 
    // sull'elemento di tipo inatteso.
    //myArrayList.Add(new char[] {'x' , 'y'});

    // Itero e stampo gli elementi di myArrayString che mi aspetto essere di tipo String,
    // se la collezione contiene elementi di tipo diverso da string avverrà un errore
    // Run-Time.
    foreach(string parola in myArrayList)
      sys.Console.Write("\"{0}\" ", parola);
    sys.Console.WriteLine();

    // Istanzio una  StringCollection che è una collezione specifica per elementi di tipo string
    // cioè fortemente tipizzata e la popolo.
    sysSCols.StringCollection myStringCollection = new sysSCols.StringCollection();
    myStringCollection.AddRange(parole);

    // La seguente linea di codice aggiunge un elemento di tipo Char[] alla
    // collezione. Scommentandola si ottiene un errore di compilazione che mi 
    // avvisa della violazione del tipo!
    //myStringCollections.Add(new char[] {'x' , 'y'});

    // Itero e stampo gli elementi di myStringCollection che necessariamente è di tipo String
    // in quanto la collezione è fortemente tipizzata
    foreach(string parola in myStringCollection)
      sys.Console.Write("'{0}' ", parola);
    sys.Console.WriteLine();
 }
}