ValueTuple en C#

ValueTuple es una estructura introducida en C# 7.0 que representa el tipo de valor Tuple . Ya está incluido en .NET Framework 4.7 o una versión superior. Le permite almacenar un conjunto de datos que contiene múltiples valores que pueden o no estar relacionados entre sí. Puede almacenar elementos a partir de 0 a 8 y puede almacenar elementos de diferentes tipos. También puede almacenar elementos duplicados en tupla de valor.

¿Por qué necesitamos ValueTuple?

Ya tenemos Tuples en C# que se usa para almacenar múltiples valores, pero Tuples tiene algunas limitaciones, estas limitaciones se solucionan en ValueTuple. O podemos decir que ValueTuple es una versión mejorada de Tuples en C# . Supera las siguientes limitaciones de las tuplas:

  • Tuple es de tipo de referencia, pero ValueTuple es de tipo de valor.
  • Tuple no proporciona convenciones de nomenclatura, pero ValueTuple proporciona convenciones de nomenclatura sólidas.
  • En Tuples no se le permite crear una tupla con cero componentes, pero en ValueTuple se le permite crear una tupla con cero elementos.
  • El rendimiento de ValueTuple es mejor que el de Tuple. Porque ValueTuple proporciona un mecanismo ligero para devolver múltiples valores de los métodos existentes. Y la sintaxis de ValueTuple está más optimizada que Tuples.
  • ValueTuple proporciona más flexibilidad para acceder a los elementos de las tuplas de valor utilizando la deconstrucción y la palabra clave _ . Pero Tuple no puede proporcionar el concepto de deconstrucción y la palabra clave _.
  • En ValueTuple, los miembros como item1 y item2 son campos. Pero en Tuple, son propiedades.
  • En ValueTuple los campos son mutables. Pero en Tuple, los campos son de solo lectura.

Creando una ValueTuple

A diferencia de Tuple, ValueTuples proporciona un mecanismo sencillo para crear e inicializar ValueTuples. Puede crear ValueTuples usando las siguientes 3 formas:

  • Uso del constructor: puede crear ValueTuple mediante el uso del constructor proporcionado por ValueTuple<T> Struct. Donde puede almacenar elementos a partir de uno a ocho con su tipo.

    Sintaxis:

    // Constructor for creating one element
    ValueTuple<T1>(T1)
    
    // Constructor for creating two elements
    ValueTuple<T1, T2>(T1, T2)
    .
    .
    .
    
    // Constructor for creating eight elements
    ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest>(T1, T2, T3, T4, T5, T6, T7, TRest)    
    

    Ejemplo:

    // C# program to illustrate how to
    // create value tuple using the 
    // ValueTuple constructor.
    using System;
      
    class GFG {
      
        // Main method
        static public void Main()
        {
      
            // ValueTuple with one element
            ValueTuple<int> ValTpl1 = new ValueTuple<int>(345678);
      
            // ValueTuple with three elements
            ValueTuple<string, string, int> ValTpl2 = new ValueTuple<string,
                                            string, int>("C#", "Java", 586);
      
            // ValueTuple with eight elements
            ValueTuple<int, int, int, int, int, int, int, ValueTuple<int> > ValTpl3 = new ValueTuple<int,
                                      int, int, int, int, int, int, ValueTuple<int> >(45, 67, 65, 34, 34,
                                                                        34, 23, new ValueTuple<int>(90));
        }
    }
  • Uso del método de creación: cuando usamos el constructor de la estructura ValueTuple<T> para crear una tupla de valor, debemos proporcionar el tipo de cada elemento almacenado en la tupla de valor, lo que hace que su código sea engorroso. Por lo tanto, C# proporciona otra estructura ValueTuple que contiene los métodos estáticos para crear un objeto de tupla de valor sin proporcionar el tipo de cada elemento.

    Sintaxis:

    // Method for creating an empty value tuple
    Create();
    
    // Method for creating 1-ValueTuple
    Create<T1>(T1)
    .
    .
    .
    
    // Method for creating 8-ValueTuple
    Create<T1, T2, T3, T4, T5, T6, T7, TRest>(T1, T2, T3, T4, T5, T6, T7, T8)
    
    

    Ejemplo:

    // C# program to create value tuple
    // using Create Method
    using System;
      
    public class GFG {
      
        // Main method
        static public void Main()
        {
      
            // Creating 0-ValueTuple
            // Using Create() Method
            var Valtpl1 = ValueTuple.Create();
      
            // Creating 3-ValueTuple
            // Using Create(T1, T2, T3) Method
            var Valtpl2 = ValueTuple.Create(12, 30, 40, 50);
      
            // Creating 8-ValueTuple
            // Using Create(T1, T2, T3, T4, T5, T6, T7, T8) Method
            var Valtpl3 = ValueTuple.Create(34, "GeeksforGeks"
                          'g', 'f', 'g', 56.78, 4323, "geeks");
        }
    }
  • Usando paréntesis(): Es la forma más simple de crear ValueTuples usando paréntesis() y los elementos se colocan entre ellos. Y los elementos se almacenan de 2 maneras diferentes:
    • Miembro con nombre: ValueTuple le permite crear una tupla en la que cada componente puede tener su propio nombre. Para que pueda acceder a ese componente con la ayuda de su nombre. Hace que su programa sea más legible y fácil de recordar. Puede asignar los nombres a los miembros del lado izquierdo o derecho, pero no de ambos lados. Si asignó nombres a ambos lados, entonces el lado izquierdo tiene prioridad sobre el lado derecho, como se muestra a continuación:

      Ejemplo 1:

      // C# program to illustrated named member
      using System;
        
      public class GFG {
          static public void Main()
          {
              (int age, string Aname, string Lang) author = (23, "Sonia", "C#");
          }
      }

      Ejemplo 2:

      // C# program to illustrated named member
      using System;
        
      public class GFG {
        
          static public void Main()
          {
              var author = (age : 23, Aname
                            : "Sonia", Lang
                            : "C#");
          }
      }
    • Miembro sin nombre: en ValueTuples, los miembros sin nombre son aquellos miembros que no tienen nombres. Simplemente se crean sin ningún nombre. Como se muestra abajo:

      Ejemplo 1:

      // C# program to illustrated UnNamed member
      using System;
        
      public class GFG {
          static public void Main()
          {
              var author = (20, "Siya", "Ruby");
          }
      }

      Ejemplo 2:

      // C# program to illustrated UnNamed member
      using System;
        
      public class GFG {
          static public void Main()
          {
              ValueTuple<int, string, string> author = (20, "Siya", "Ruby");
          }
      }

Acceso a miembros de ValueTuple

Aquí aprendemos cómo acceder a miembros con nombre y sin nombre de ValueTuples.

  • Acceder a miembros sin nombre: en ValueTuple, se puede acceder a los miembros sin nombre utilizando los nombres de propiedades de elementos predeterminados como Elemento1, Elemento2, Elemento3, etc. Como se muestra en el siguiente ejemplo:

    Ejemplo:

    // C# program to illustrate how to 
    // access unnamed members of ValueTuple
    using System;
      
    public class GFG {
      
        // Main Method
        static public void Main()
        {
      
            // ValueTuple with three elements
            var author = (20, "Siya", "Ruby");
      
            // Accessing the ValueTuple
            // Using default Item property
            Console.WriteLine("Age:" + author.Item1);
            Console.WriteLine("Name:" + author.Item2);
            Console.WriteLine("Language:" + author.Item3);
        }
    }
  • Acceso a miembros con nombre: en ValueTuples, los miembros con nombre se utilizan de acuerdo con su nombre. No es necesario acceder a estos miembros con nombre con la propiedad de elemento predeterminada. Como se muestra en el siguiente ejemplo, ValueTuple contiene tres elementos, es decir, Book_id, Author_name y Book_name. Y accedemos directamente a estos elementos según sus nombres.

    Ejemplo:

    // C# program to illustrate how to access
    // named members of ValueTuple
    using System;
      
    public class GFG {
      
        // Main Method
        static public void Main()
        {
      
            // ValueTuple with three elements
            var library = (Book_id : 2340, Author_name
                           : "Arundhati Roy", Book_name
                           : "The God of Small Things");
      
            // Accessing the ValueTuple
            // according to their names
            Console.WriteLine("Book Id: {0}", library.Book_id);
            Console.WriteLine("Author Name: {0}", library.Author_name);
            Console.WriteLine("Book Name: {0}", library.Book_name);
        }
    }

    Producción:

    Book Id: 2340
    Author Name: Arundhati Roy
    Book Name: The God of Small Things
    

Tupla de valor de retorno

En C#, puede devolver un ValueTuple desde un método. Como se muestra en el siguiente ejemplo, el método TouristDetails devuelve un ValueTuple con 3 elementos:

Ejemplo:

// C# program to illustrate how a
// method return ValueTuple
using System;
  
public class GFG {
  
    // This method returns the tourist details
    static(int, string, string) TouristDetails()
    {
        return (384645, "Sophite", "USA");
    }
  
    // Main method
    static public void Main()
    {
  
        // Store the data provided by the TouristDetails method
        var(Tourist_Id, Tourist_Name, Country) = TouristDetails();
  
        // Display data
        Console.WriteLine("Tourist Details: ");
        Console.WriteLine($ "Tourist Id: {Tourist_Id}");
        Console.WriteLine($ "Tourist Name: {Tourist_Name}");
        Console.WriteLine($ "Country: {Country}");
    }
}

Producción:

Tourist Details: 
Tourist Id: 384645
Tourist Name: Sophite
Country: USA

Publicación traducida automáticamente

Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *