C# 7.0 lleva tiempo en el mercado, y todo el mundo sabe que hay una optimización para tuplas en la nueva funcionalidad: ValueTuple. Aquí tienes ejemplos detallados para explicar Tuple VS ValueTuple en 10 minutos y así comprender mejor los beneficios y el uso de ValueTuple.
Si sabes lo suficiente sobre Tuple, puedes saltarte la sección "Revisar Tuple" y ir directamente a la sección "ValueTuple Explicado" para ver el deslumbrante uso de las tuplas de valor.
Mira atrás a Tuple
Tuple es una nueva función que salió con C# 4.0 y está disponible en .Net Framework 4.0 y versiones superiores.
Una tupla es una estructura de datos con un número y secuencia específicos de elementos. Por ejemplo, diseña una estructura de datos triple para almacenar la información del alumno, que contiene un total de tres elementos: el primero es el nombre, el segundo la edad y el tercero la altura.
Los usos específicos de las tuplas son los siguientes:
1. Cómo crear una tupla
Por defecto. Marco de la redLas tuplas solo soportan de 1 a 7 elementos de tuplaSi hay 8 elementos o más, necesitas usar las propiedades de anidamiento y descanso de la Túple para implementarlo. Además, la clase Tupla proporciona un método estático para crear objetos tupla.
Crea tuplas usando constructores:
Construye tuplas usando el método estático de tuplas, soportando hasta ocho elementos:
Nota: El tipo de Tupla construido aquí es en realidad Tuple<int, int, int, int, Tuple<int>>, así que el tipo de dato obtenido por testTuple8.Rest es Tuple<int>, así que para obtener el valor exacto, necesitas tomar la propiedad Item1.
2. Representa un conjunto de datos Crea una tupla abajo para representar tres datos sobre un alumno: nombre, edad y altura, sin crear una clase adicional por separado.
3. Devolver múltiples valores de un método Cuando una función necesita devolver varios valores, generalmente se puede usar el parámetro out, y se pueden usar tuplas en lugar de out para devolver varios valores.
4. Transferencia multivalor para métodos de parámetro único
Cuando el parámetro de función es solo un tipo de objeto, se pueden pasar varios valores de parámetro usando la implementación de tupla.
A pesar de los métodos prácticos mencionados, las tuplas también presentan carencias significativas:
- Al acceder a elementos, solo puedes acceder a ellos a través de ItemX, y necesitas aclarar el orden de los elementos antes de usarlos, y los nombres de los atributos no tienen un significado práctico, lo cual es incómodo de recordar.
- Hay hasta ocho elementos, y si quieres más, solo puedes expandirte anidando con el último elemento;
- La tupla es un tipo de referencia, no un tipo de valor como otros tipos simples, que asigna espacio en el montón y puede requerir demasiado trabajo de creación y asignación cuando es intensivo en CPU.
Por ello, se introdujo un nuevo tipo de ValueTuple en C# 7.0, que se detalla en las siguientes secciones.
ValueTuple explica en detalle
ValueTuple es una de las nuevas características de C# 7.0, disponible para .Net Framework 4.7 y superiores.
ValueTuple no requiere 4,7, mientras Nuget esté bien, 4,7 está integrado. Además, ValueTuple es un tipo de estructura, Microsoft recomienda no usar estructuras de más de 64 bytes, lo cual también es efectivo para ValueTuple.
Una tupla de valor también es una estructura de datos utilizada para representar un número y secuencia específicos de elementos, pero es diferente de una clase de tupla, con las siguientes diferencias principales:
Una tupla valor es una estructura, un tipo de valor, no una clase, mientras que una tupla es una clase, un tipo de referencia; Los elementos de la tupla de valor son variables, no de solo lectura, es decir, pueden cambiar el valor del elemento en la tula de valor; Una tupla de valor de miembros de datos es un campo, no un atributo. El uso específico de las tuplas de valor es el siguiente:
1. Cómo crear una tupla de valor Al igual que las clases de tuplas, las tuplas de valor de .Net Framework solo admiten de 1 a 7 elementos de tupla, y si hay 8 o más elementos, necesitas usar las propiedades anidadas y Rest de la tupla de valor para implementarlo. Además, la clase ValueTuple puede proporcionar métodos estáticos para crear objetos de tupla de valor.
Crea tuplas usando constructores:
Construye tuplas usando el método estático de tuplas, soportando hasta ocho elementos:
Ten en cuenta que el tipo de Tupla construido aquí es en realidad Tuple<int, int, <int>>, así que el tipo de dato obtenido por testTuple8.Rest es Tuple<int>, así que para obtener el valor exacto necesitas tomar la propiedad Item1.
Diferencia de optimización:Cuando se construye una tupla de valores con más de 7 elementos, los valores en la tupla anidada pueden accederse usando el siguiente ItemX, y para el ejemplo anterior, acceder al décimo elemento, ya sea a través de testTuple10.Rest.Item3 o testTuple10.Item10.
2. Representa un conjunto de datos Crea una tupla de valores que represente tres datos sobre un alumno: nombre, edad y altura, sin crear una clase adicional por separado.
3. Devolver múltiples valores de un método Las tuplas de valor también pueden devolver múltiples valores en lugar del parámetro out en la definición de la función.
Diferencia de optimización:El valor de retorno puede especificarse en el ValueTuple de forma inexplicable, usando una nueva sintaxis (,,), como (string, int, uint):
Depurar el tipo de studentInfo es el triplete ValueType.
Diferencia de optimización:El valor de retorno puede especificar el nombre del elemento para facilitar la comprensión de la asignación y el acceso a la memoria:
Asignación de memoria conveniente:
4. Transferencia multivalor para métodos de parámetro único Cuando un parámetro de función es solo un tipo de objeto, se pueden pasar varios valores usando la implementación de tuplas de valores.
5. Deconstruir la ValueTuple Puedes usar var (x, y) o (var x, var y) para resolver elementos de tuplas y construir variables locales, mientras usas el símbolo "_" para ignorar elementos no deseados.
Como se mencionó antes, ValueTuple hace que C# sea más sencillo y fácil de usar. Las principales ventajas sobre Tuple son las siguientes:
- ValueTuple soporta una nueva sintaxis para los valores de retorno de funciones" (,,)", haciendo el código más sencillo;
- Cabe señalar aquí que, aunque está nombrado, en realidad el valor tupla no define el atributo o campo de tal nombre, el nombre real sigue siendo ItemX, y todos los nombres de los elementos solo se usan durante el diseño y la compilación, no en tiempo de ejecución (así que preste atención a las operaciones de serialización y deserialización de este tipo);
- Algunas o todas las tuplas de elementos pueden usarse de forma más conveniente mediante métodos de destrucción;
- Las tuplas de valor son tipos de valor, que son más eficientes de usar que las tuplas de tipos de referencia, y las tuplas de valor tienen un método de comparación que puede usarse para comparar si son iguales, véase Detalles:https://msdn.microsoft.com/en-us/library/system.valuetuple
|