Come usare i tipi anonimi in C #

Un tipo anonimo è un tipo che non ha un nome. È possibile utilizzare un tipo anonimo per incapsulare un insieme di proprietà di sola lettura all'interno di una singola unità e non è necessario definire in anticipo il tipo anonimo. Questo articolo illustra cosa sono i tipi anonimi, perché sono importanti e come possiamo lavorare con i tipi anonimi in C #.

Per lavorare con gli esempi di codice forniti in questo articolo, dovresti avere Visual Studio 2019 installato nel tuo sistema. Se non hai già una copia, puoi scaricare Visual Studio 2019 qui. 

Crea un progetto di applicazione console in Visual Studio

Prima di tutto, creiamo un progetto di applicazione console .NET Core in Visual Studio. Supponendo che Visual Studio 2019 sia installato nel sistema, seguire i passaggi descritti di seguito per creare un nuovo progetto di applicazione console .NET Core in Visual Studio.

  1. Avvia l'IDE di Visual Studio.
  2. Fai clic su "Crea nuovo progetto".
  3. Nella finestra "Crea nuovo progetto", seleziona "App Console (.NET Core)" dall'elenco dei modelli visualizzati.
  4. Fare clic su Avanti.
  5. Nella finestra "Configura il tuo nuovo progetto" mostrata di seguito, specifica il nome e la posizione per il nuovo progetto.
  6. Fare clic su Crea.

Questo creerà un nuovo progetto di applicazione console .NET Core in Visual Studio 2019. Useremo questo progetto nelle sezioni successive di questo articolo per illustrare come possiamo lavorare con i tipi anonimi in C #.

Comprendere i tipi anonimi in C #

Essenzialmente un tipo anonimo è un tipo di riferimento e può essere definito utilizzando la parola chiave var. È possibile avere una o più proprietà in un tipo anonimo, ma tutte sono di sola lettura. A differenza di una classe C #, un tipo anonimo non può avere un campo o un metodo: può avere solo proprietà.

È possibile accedere a un tipo anonimo o alle sue proprietà all'interno del metodo in cui è stato definito il tipo anonimo. In altre parole, l'accessibilità di un tipo anonimo è limitata all'ambito in cui è stato definito.

Usa un tipo anonimo in C #

Analizziamo ora un codice. Considera il seguente tipo anonimo.

var autore = nuovo

{

  FirstName = "Joydip",

  LastName = "Kanjilal",

  Indirizzo = "Hyderabad, INDIA"

};

Nello snippet di codice precedente, autore è il nome di un'istanza di un tipo anonimo creato utilizzando la nuova parola chiave. (Il nome del tipo anonimo stesso è noto solo al compilatore.) Questo tipo anonimo contiene tre proprietà, ovvero FirstName, LastName e Address. Tutte queste proprietà sono di tipo stringa. Notare che quando si lavora con un tipo anonimo, non è necessario specificare il tipo di una proprietà prima di inizializzarla.

È possibile utilizzare il seguente frammento di codice per accedere a tutte e tre le proprietà del tipo anonimo precedente.

Console.WriteLine ("Nome: {0} {1}", author.FirstName, author.LastName);

Console.WriteLine ("Indirizzo: {0}", author.Address);

Usare un tipo anonimo annidato in C #

Anche i tipi anonimi possono essere nidificati. Cioè, puoi avere un tipo anonimo come proprietà all'interno di un altro tipo anonimo. Ecco un esempio che lo illustra.

var autore = nuovo

{

  FirstName = "Joydip",

  LastName = "Kanjilal",

  Indirizzo = nuovo {Città = "Hyderabad", Paese = "INDIA"}

};

È possibile accedere alle proprietà di questo tipo anonimo annidato come mostrato nello snippet di codice riportato di seguito.

Console.WriteLine ("Nome: {0} {1}", author.FirstName, author.LastName);

Console.WriteLine ("Indirizzo: {0}", author.Address.City);

Il programma completo è fornito di seguito come riferimento.

static void Main (string [] args)

{

  var autore = nuovo

  {

     FirstName = "Joydip",

     LastName = "Kanjilal",

     Indirizzo = nuovo {Città = "Hyderabad", Paese = "INDIA"}

  };

  Console.WriteLine ("Nome: {0} {1}", author.FirstName, author.LastName);

  Console.WriteLine ("Indirizzo: {0}", author.Address.City);

  Console.Read ();

}

Usa tipi anonimi con LINQ 

La clausola Select in LINQ crea e restituisce un tipo anonimo come risultato. Lo snippet di codice seguente lo illustra.

Considera la seguente classe denominata Author.

public class Autore

{

  public int Id {get; impostato; }

  stringa pubblica FirstName {get; impostato; }

  stringa pubblica LastName {get; impostato; }

}

Il frammento di codice seguente mostra come creare un elenco di autori.

Autori IListi =

nuovo elenco ()

{

  nuovo autore () {Id = 1, FirstName = "John", LastName = "Willey"},

  nuovo autore () {Id = 2, FirstName = "Steve", LastName = "Smith"},

  nuovo autore () {Id = 3, FirstName = "Bill", LastName = "Ruffner"},

  nuovo autore () {Id = 4, FirstName = "Joydip", LastName = "Kanjilal"}

};

E il frammento di codice successivo mostra come è possibile sfruttare la clausola Select in LINQ insieme a un tipo anonimo per restituire il risultato all'esecuzione di una query.

var risultato = da a in autori seleziona nuovo

{

   Id = a.Id,

   Name = a.FirstName + "\ t" + a.LastName

};

È ora possibile visualizzare gli ID e i nomi degli autori nella finestra della console come mostrato nello snippet di codice di seguito.

foreach (dati var nel risultato)

      Console.WriteLine (data.Name);

Il programma completo è fornito di seguito come riferimento.

public class Autore

    {

        public int Id {get; impostato; }

        stringa pubblica FirstName {get; impostato; }

        stringa pubblica LastName {get; impostato; }

    }

    programma di classe

    {

        static void Main (string [] args)

        {

            Autori IList = new List () {

                        nuovo autore () {Id = 1, FirstName = "John",

                                      LastName = "Willey"},

                        nuovo autore () {Id = 2, FirstName = "Steve",

                                      LastName = "Smith"},

                        nuovo autore () {Id = 3, FirstName = "Bill",

                                      LastName = "Ruffner"},

                        nuovo autore () {Id = 4, FirstName = "Joydip",

                                      LastName = "Kanjilal"}

                };

            var risultato = da a in autori

                         seleziona nuovo

                         {

                             Id = a.Id,

                             Name = a.FirstName + "\ t" + a.LastName

                         };

            foreach (dati var nel risultato)

                Console.WriteLine (data.Name);

            Console.Read ();

        }

    }

I tipi anonimi consentono di creare un tipo e di istanziarlo rapidamente senza dover dichiarare il tipo in precedenza. Dal punto di vista del CLR, un tipo anonimo è solo un altro tipo di riferimento. Il compilatore fornisce un nome a ogni tipo anonimo sotto le coperte.

I tipi anonimi derivano dalla classe Object. Questo è il motivo per cui puoi eseguire il cast di un tipo anonimo solo a un'istanza di tipo Object. Si noti inoltre che il tipo restituito di un metodo, una proprietà, un evento, un delegato e così via non può essere un tipo anonimo.

Come fare di più in C #:

  • Quando usare una classe astratta e un'interfaccia in C #
  • Come lavorare con AutoMapper in C #
  • Come usare le espressioni lambda in C #
  • Come lavorare con i delegati Action, Func e Predicate in C #
  • Come utilizzare Dapper ORM in C #
  • Come implementare un semplice logger in C #
  • Come lavorare con log4net in C #
  • Come lavorare con i delegati in C #
  • Come lavorare con gli attributi in C #
  • Come utilizzare il modello di progettazione del peso mosca in C #
  • Come implementare il modello di progettazione del repository in C #
  • Esplorazione di metodi virtuali e astratti in C #
  • Come lavorare con la riflessione in C #
  • Come lavorare con Filesystemwatcher in C #