Cómo usar tipos anónimos en C #

Un tipo anónimo es un tipo que no tiene nombre. Puede usar un tipo anónimo para encapsular un conjunto de propiedades de solo lectura dentro de una sola unidad, y no necesita definir el tipo anónimo de antemano. Este artículo analiza qué son los tipos anónimos, por qué son importantes y cómo podemos trabajar con tipos anónimos en C #.

Para trabajar con los ejemplos de código proporcionados en este artículo, debe tener Visual Studio 2019 instalado en su sistema. Si aún no tiene una copia, puede descargar Visual Studio 2019 aquí. 

Crear un proyecto de aplicación de consola en Visual Studio

En primer lugar, creemos un proyecto de aplicación de consola .NET Core en Visual Studio. Suponiendo que Visual Studio 2019 esté instalado en su sistema, siga los pasos que se describen a continuación para crear un nuevo proyecto de aplicación de consola .NET Core en Visual Studio.

  1. Inicie el IDE de Visual Studio.
  2. Haga clic en "Crear nuevo proyecto".
  3. En la ventana "Crear nuevo proyecto", seleccione "Aplicación de consola (.NET Core)" en la lista de plantillas que se muestran.
  4. Haga clic en Siguiente.
  5. En la ventana "Configure su nuevo proyecto" que se muestra a continuación, especifique el nombre y la ubicación del nuevo proyecto.
  6. Haga clic en Crear.

Esto creará un nuevo proyecto de aplicación de consola .NET Core en Visual Studio 2019. Usaremos este proyecto en las secciones siguientes de este artículo para ilustrar cómo podemos trabajar con tipos anónimos en C #.

Comprender los tipos anónimos en C #

Básicamente, un tipo anónimo es un tipo de referencia y se puede definir mediante la palabra clave var. Puede tener una o más propiedades en un tipo anónimo, pero todas son de solo lectura. A diferencia de una clase de C #, un tipo anónimo no puede tener un campo o un método, solo puede tener propiedades.

Puede acceder a un tipo anónimo o sus propiedades dentro del método donde se ha definido el tipo anónimo. En otras palabras, la accesibilidad de un tipo anónimo se limita al ámbito donde se ha definido.

Use un tipo anónimo en C #

Ahora profundicemos en un código. Considere el siguiente tipo anónimo.

var autor = nuevo

{

  FirstName = "Joydip",

  LastName = "Kanjilal",

  Dirección = "Hyderabad, INDIA"

};

En el fragmento de código anterior, autor es el nombre de una instancia de un tipo anónimo creado con la nueva palabra clave. (El nombre del tipo anónimo en sí solo lo conoce el compilador). Este tipo anónimo contiene tres propiedades, a saber, Nombre, Apellido y Dirección. Todas estas propiedades son del tipo cadena. Tenga en cuenta que cuando se trabaja con un tipo anónimo, no es necesario especificar el tipo de propiedad antes de inicializarla.

Puede utilizar el siguiente fragmento de código para acceder a las tres propiedades del tipo anónimo anterior.

Console.WriteLine ("Nombre: {0} {1}", autor.Nombre inicial, autor.Nombre final);

Console.WriteLine ("Dirección: {0}", autor.Dirección);

Use un tipo anónimo anidado en C #

Los tipos anónimos también se pueden anidar. Es decir, puede tener un tipo anónimo como propiedad dentro de otro tipo anónimo. Aquí hay un ejemplo que ilustra esto.

var autor = nuevo

{

  FirstName = "Joydip",

  LastName = "Kanjilal",

  Dirección = nueva {Ciudad = "Hyderabad", País = "INDIA"}

};

Puede acceder a las propiedades de este tipo anónimo anidado como se muestra en el fragmento de código que se proporciona a continuación.

Console.WriteLine ("Nombre: {0} {1}", autor.Nombre inicial, autor.Nombre final);

Console.WriteLine ("Dirección: {0}", autor.Address.City);

El programa completo se proporciona a continuación para su referencia.

static void Main (cadena [] argumentos)

{

  var autor = nuevo

  {

     FirstName = "Joydip",

     LastName = "Kanjilal",

     Dirección = nueva {Ciudad = "Hyderabad", País = "INDIA"}

  };

  Console.WriteLine ("Nombre: {0} {1}", autor.Nombre inicial, autor.Nombre final);

  Console.WriteLine ("Dirección: {0}", autor.Address.City);

  Console.Read ();

}

Utilice tipos anónimos con LINQ 

La cláusula Select en LINQ crea y devuelve un tipo anónimo como resultado. El siguiente fragmento de código ilustra esto.

Considere la siguiente clase llamada Autor.

Autor de clase pública

{

  public int Id {obtener; conjunto; }

  cadena pública FirstName {get; conjunto; }

  cadena pública LastName {get; conjunto; }

}

El siguiente fragmento de código muestra cómo puede crear una lista de autores.

Autores IListas =

lista nueva()

{

  nuevo autor () {Id = 1, FirstName = "John", LastName = "Willey"},

  nuevo autor () {Id = 2, FirstName = "Steve", LastName = "Smith"},

  nuevo autor () {Id = 3, FirstName = "Bill", LastName = "Ruffner"},

  nuevo autor () {Id = 4, FirstName = "Joydip", LastName = "Kanjilal"}

};

Y el siguiente fragmento de código muestra cómo puede aprovechar la cláusula Select en LINQ junto con un tipo anónimo para devolver el resultado al ejecutar una consulta.

var result = de a en autores seleccione nuevo

{

   Id = a.Id,

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

};

Ahora puede mostrar los ID y los nombres de los autores en la ventana de la consola, como se muestra en el fragmento de código a continuación.

foreach (datos var en el resultado)

      Console.WriteLine (data.Name);

El programa completo se proporciona a continuación para su referencia.

Autor de clase pública

    {

        public int Id {obtener; conjunto; }

        cadena pública FirstName {get; conjunto; }

        cadena pública LastName {get; conjunto; }

    }

    programa de clase

    {

        static void Main (cadena [] argumentos)

        {

            IList autores = new List () {

                        nuevo autor () {Id = 1, FirstName = "John",

                                      LastName = "Willey"},

                        nuevo autor () {Id = 2, FirstName = "Steve",

                                      LastName = "Smith"},

                        nuevo autor () {Id = 3, FirstName = "Bill",

                                      LastName = "Ruffner"},

                        nuevo autor () {Id = 4, FirstName = "Joydip",

                                      LastName = "Kanjilal"}

                };

            var resultado = de a en autores

                         seleccionar nuevo

                         {

                             Id = a.Id,

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

                         };

            foreach (datos var en el resultado)

                Console.WriteLine (data.Name);

            Console.Read ();

        }

    }

Los tipos anónimos le permiten crear un tipo e instanciarlo rápidamente sin tener que declarar el tipo antes. Desde el punto de vista de CLR, un tipo anónimo es solo otro tipo de referencia. El compilador proporciona un nombre a cada tipo anónimo debajo de las cubiertas.

Los tipos anónimos se derivan de la clase Object. Esta es la razón por la que puede convertir un tipo anónimo solo en una instancia del tipo de objeto. Tenga en cuenta también que el tipo de retorno de un método, una propiedad, un evento, un delegado, etc. no puede ser un tipo anónimo.

Cómo hacer más en C #:

  • Cuándo usar una clase abstracta frente a una interfaz en C #
  • Cómo trabajar con AutoMapper en C #
  • Cómo usar expresiones lambda en C #
  • Cómo trabajar con delegados Action, Func y Predicate en C #
  • Cómo usar Dapper ORM en C #
  • Cómo implementar un registrador simple en C #
  • Cómo trabajar con log4net en C #
  • Cómo trabajar con delegados en C #
  • Cómo trabajar con atributos en C #
  • Cómo usar el patrón de diseño flyweight en C #
  • Cómo implementar el patrón de diseño del repositorio en C #
  • Explorando métodos virtuales y abstractos en C #
  • Cómo trabajar con la reflexión en C #
  • Cómo trabajar con filesystemwatcher en C #