¿Cuál es la diferencia entre el tipo anónimo y la tupla?Tipo anónimo y tupla
Respuesta
Los tipos anónimos tienen nombres de propiedad que llevan más información, para las tuplas no tiene esto. Sin embargo, no puede usar tipos anónimos como valores de retorno y parámetros y puede hacerlo con tuplas.
Un ejemplo de cuando una tupla es agradable es cuando desea devolver valores múltiples. @Petar Minchev mentions this link que da un buen ejemplo.
Puede que desee un método Find()
que devuelva un índice y el valor. Otro ejemplo sería la posición en un plano 2D o 3D.
Una tupla no es un tipo anónimo, es un tipo con nombre. Puede usarlo como un tipo de devolución o argumento de método. Este código es válido:
Tuple<int, string> GetTuple()
{
return Tuple.Create(1, "Bob");
}
No se puede hacer esto con un tipo anónimo, que tendría que volver System.Object
lugar. Normalmente, termina teniendo que usar Reflection en estos objetos (o dynamic
en .NET 4) para obtener los valores de las propiedades individuales.
Además, como se menciona Brian, los nombres de las propiedades en un Tuple
son fijos - que están siempre Item1
, Item2
, Item3
y así sucesivamente, mientras que con un tipo anónimo que pueden elegir los nombres. Si se escribe:
var x = new { ID = 1, Name = "Bob" }
Entonces el tipo anónimo en realidad tiene ID
y Name
propiedades. Pero si se escribe:
Tuple.Create(1, "Bob")
Entonces la tupla resultante sólo tiene propiedades Item1
y Item2
.
Otro punto a favor de los tipos anónimos sería que fácilmente puede tener más de 8 propiedades. Si bien esto es factible usando tuplas, no es tan bonito.
var tuple = Tuple.Create(1, 2, 3, 4, 5, 6, 7, Tuple.Create(8, 9)); //and so on
o escribe tus propias clases de tupla.
Una similitud interesante a destacar es que ambos tipos anónimos tuplas y le dan la inmutabilidad y la comparabilidad igualdad (ambos anulaciones Equals
y GetHashCode
) basado en las propiedades por defecto.
Solo una pequeña actualización de esta respuesta ya que C# 7 está fuera de control. Las tuplas ahora tienen superpoderes y algunas veces pueden reemplazar clases y tipos anónimos. Tomemos por ejemplo este método que acepta y devuelve tuplas con propiedades nombradas.
void Main()
{
var result = Whatever((123, true));
Debug.Assert(result.Something == 123);
Debug.Assert(result.Another == "True");
}
(int Something, string Another) Whatever((int Neat, bool Cool) data)
{
return (data.Neat, data.Cool.ToString());
}
Eso es genial.
- 1. tipo anónimo y propiedades múltiples
- 2. Transmitido a tipo anónimo
- 3. tipo void en std :: tupla
- 4. ¿Crear un tipo anónimo dinámicamente?
- 5. Convertir Anónimo Tipo de Clase
- 6. Emitir un tipo anónimo en Objeto y recuperar un campo
- 7. Scala composición del tipo de tupla
- 8. enviar tipo anónimo a una interfaz?
- 9. Tipo anónimo a refactorización de clase real
- 10. Obtener el valor de tipo anónimo
- 11. Devolviendo el tipo anónimo en C#
- 12. Propiedades de tipo anónimo de referencia
- 13. Anónimo tipo de evento repetidor DataBound
- 14. Devolver Tipo anónimo desde una función
- 15. Unirme al tipo anónimo en LINQ
- 16. C# - convertir el tipo anónimo en observablecollection
- 17. Configuradores de propiedad de tipo anónimo
- 18. Accediendo a C# Objetos de tipo anónimo
- 19. C# Anónimo Acceso Tipo de otro método
- 20. ¿Cómo probar si un tipo es anónimo?
- 21. DataGridVIew poblado con tipo anónimo, ¿cómo filtrar?
- 22. Determinar si un tipo es un tipo anónimo
- 23. ¿Puede un tipo anónimo heredar de otro tipo?
- 24. vector de tupla y initializer_list
- 25. Composición de función y tupla
- 26. ¿Cómo lidiar con conflictos de miembros duplicados de tipo anónimo?
- 27. Configuración de una propiedad de solo lectura con tipo anónimo
- 28. Convertir KeyValuePair al tipo anónimo en una consulta LINQ
- 29. Crear un tipo anónimo a partir de la reflexión ParamInfo []
- 30. Pasar una instancia de tipo anónimo a través de WCF
Aquí hay un artículo que explica lo que quiere: http://msdn.microsoft.com/en-us/vcsharp/ee957397.aspx –