{"id":3175,"date":"2017-04-06T06:00:32","date_gmt":"2017-04-06T13:00:32","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=3175"},"modified":"2025-06-13T20:57:09","modified_gmt":"2025-06-14T03:57:09","slug":"csharp-tuples-new-csharp-7-feature","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/csharp-tuples-new-csharp-7-feature\/","title":{"rendered":"Tuplas C#: Nuevo lenguaje C# 7"},"content":{"rendered":"<div class=\"paragraph\">\n<div class=\"paragraph\">\n<p>Las tuplas C# son una nueva caracter\u00edstica de C# 7. Voy a mostrar los conceptos b\u00e1sicos de c\u00f3mo funcionan las tuplas C#. Tambi\u00e9n voy a mezclar un poco de Couchbase para mostrar las tuplas en acci\u00f3n. Sin embargo, si no quieres <a href=\"https:\/\/www.couchbase.com\/blog\/es\/downloads\/\">instalar Couchbase<\/a> s\u00f3lo para jugar con tuplas, no te preocupes, podr\u00e1s seguirlo.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>En <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/tree\/master\/Groves\/063TuplesCSharp7\/tuples-example\">el c\u00f3digo fuente que utilizo para esta entrada del blog est\u00e1 disponible en GitHub<\/a> para que lo pruebes si quieres.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><em>Nota: Si hace tiempo que utiliza C#, es posible que recuerde la funci\u00f3n <a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/system.tuple(v=vs.110).aspx\">Clase Tuple que se introdujo en .NET 4<\/a>. Esa clase sigue existiendo, pero no es lo mismo que la nueva funci\u00f3n de tupla de C#.<\/em><\/p>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_what_are_c_tuples\">\u00bfQu\u00e9 son las tuplas C#?<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Una \"tupla\" es un concepto matem\u00e1tico que no es m\u00e1s que una lista de elementos. En la familia de lenguajes LISP, la codificaci\u00f3n se basa casi exclusivamente en la idea de que todo es una lista. Una vez m\u00e1s, C# toma prestada una idea del mundo de la programaci\u00f3n funcional y la integra en un lenguaje no funcional. As\u00ed, obtenemos las tuplas C# (echa un vistazo a la etiqueta <a href=\"https:\/\/github.com\/dotnet\/roslyn\/issues\/347\">propuesta original de tupla C# de Mads Torgersen<\/a> para m\u00e1s detalles y antecedentes).<\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_remember_anonymous_types\">\u00bfTe acuerdas de los tipos an\u00f3nimos?<\/h3>\n<div class=\"paragraph\">\n<p>Pero, para simplificarlo, consideremos algo con lo que quiz\u00e1 ya est\u00e9s familiarizado en C#, un tipo an\u00f3nimo. Para repasar, puedes instanciar un nuevo objeto sin especificar un tipo:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">var myObject = new { Foo = \"bar\", Baz = 123 };<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Entre bastidores, en realidad <em>es<\/em> un tipo que hereda de la base <code>Objeto<\/code> pero, en general, s\u00f3lo nos ocupamos del objeto, no de su tipo.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Adem\u00e1s, no puedo devolver un tipo an\u00f3nimo de un m\u00e9todo, o pasar un tipo an\u00f3nimo como par\u00e1metro sin perder la informaci\u00f3n de tipo en el proceso.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">private object GetAnonymousObject()\r\n{\r\n    return new {Foo = \"bar\", Baz = 123};\r\n}\r\n\r\nprivate void AnotherMethod()\r\n{\r\n    var obj = GetAnonymousObject();\r\n    Console.WriteLine(obj.Foo); \/\/ compiler error :(\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Son \u00fatiles, sin duda, pero generalmente me refiero a ellas como an\u00f3nimas <em>objetos<\/em> como yo las uso, por estas razones.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_what_s_this_got_to_do_with_c_tuples\">\u00bfQu\u00e9 tiene esto que ver con las tuplas C#?<\/h3>\n<div class=\"paragraph\">\n<p>Pienso en las tuplas C# como una forma de hacer que C# devuelva tipos an\u00f3nimos, pero con informaci\u00f3n m\u00e1s rica. Son una forma de crear una \"clase\" sobre la marcha sin definir realmente una clase. La sintaxis de las tuplas consiste simplemente en poner entre par\u00e9ntesis una lista de tipos y nombres separados por comas. Un literal de tupla no es m\u00e1s que una lista de literales separados por comas y tambi\u00e9n rodeados de par\u00e9ntesis. Por ejemplo:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">(string FirstName, string LastName) myTuple = (\"Matt\", \"Groves\");\r\n\r\nConsole.WriteLine(myTuple.FirstName); \/\/ no compiler error :)\r\nConsole.WriteLine(myTuple.LastName);  \/\/ no compiler error :)<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p><em>Nota: Ahora mismo prefiero PascalCase para las propiedades de las tuplas. No s\u00e9 si es la pauta oficial o no, pero a m\u00ed me \"parece\" correcta.<\/em><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_c_tuples_in_action\">Tuplas C# en acci\u00f3n<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>He puesto a trabajar tuples en una sencilla aplicaci\u00f3n de consola que interact\u00faa con Couchbase.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>He creado un <code>BucketHelper<\/code> que es una fachada muy simple sobre la clase normal de Couchbase <code>IBucket<\/code>. Esta clase tiene dos m\u00e9todos: uno para obtener un documento por clave y devolver una tupla, y otro para insertar una tupla como documento.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">public class BucketHelper\r\n{\r\n    private readonly IBucket _bucket;\r\n\r\n    public BucketHelper(IBucket bucket)\r\n    {\r\n        _bucket = bucket;\r\n    }\r\n\r\n    public (string Key, T obj) GetTuple&lt;T&gt;(string key)\r\n    {\r\n        var doc = _bucket.Get&lt;T&gt;(key);\r\n        return (doc.Id, doc.Value);\r\n    }\r\n\r\n    public void InsertTuple&lt;T&gt;((string Key, T obj) tuple)\r\n    {\r\n        _bucket.Insert(new Document&lt;T&gt;\r\n        {\r\n            Id = tuple.Key,\r\n            Content = tuple.obj\r\n        });\r\n    }\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Para instanciar este helper, basta con pasarle un archivo <code>IBucket<\/code> en el constructor.<\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_tuple_as_a_return_type\">Tuple como tipo de retorno<\/h3>\n<div class=\"paragraph\">\n<p>A continuaci\u00f3n, puede utilizar la funci\u00f3n <code>GetTuple<\/code> para obtener un documento de Couchbase como una tupla.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">var bucketHelper = new BucketHelper(bucket);\r\n\r\n(string key, Film film) fightClub = bucketHelper.GetTuple&lt;Film&gt;(\"film-001\");<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>La tupla constar\u00e1 de una cadena (la clave del documento) y un objeto del tipo que especifiques. El contenido del documento es JSON y ser\u00e1 serializado a un objeto C# por el SDK .NET.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Adem\u00e1s, f\u00edjate en que el nombre de las propiedades de las tuplas no tiene por qu\u00e9 coincidir. Yo he utilizado <code>obj<\/code> en <code>BucketHelper<\/code> pero utilic\u00e9 <code>pel\u00edcula<\/code> cuando llam\u00e9 <code>GetTuple<\/code>. Los tipos tienen que coincidir, por supuesto.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_tuple_as_a_parameter_type\">Tuple como tipo de par\u00e1metro<\/h3>\n<div class=\"paragraph\">\n<p>Tambi\u00e9n puedo hacer lo contrario y pasar una tupla como par\u00e1metro a <code>InsertTuple<\/code>.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">string key = Guid.NewGuid().ToString();\r\nFilm randomFilm = GenerateRandomFilm();\r\nbucketHelper.InsertTuple((key, randomFilm));<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>En <code>GenerarPel\u00edculaAleatoria<\/code> devuelve un <code>Pel\u00edcula<\/code> con algunos valores aleatorios (echa un vistazo al objeto <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/tree\/master\/Groves\/063TuplesCSharp7\/tuples-example\">Fuente GitHub<\/a> para m\u00e1s detalles). Una tupla de <code>(cadena, Pel\u00edcula)<\/code> se pasa a <code>InsertTuple<\/code>. El SDK de Couchbase .NET lo toma de ah\u00ed e inserta un documento con la clave\/valor apropiado.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Ejecutando la aplicaci\u00f3n de consola, deber\u00edas obtener una salida parecida a esta:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/06301-csharp-tuples-console-output.png\" alt=\"C# tuples sample console output\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><em>Ten en cuenta que el SDK .NET de Couchbase en este momento no tiene soporte directo para tuplas, y puede que nunca lo necesite. Este c\u00f3digo es simplemente para ayudar a demostrar tuplas C#. No recomiendo usar el BucketHelper tal cual en producci\u00f3n.<\/em><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_tuh_ple_or_too_ple\">\u00bfTUH-ple o TOO-ple?<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Creo recordar que mis profesores lo pronunciaban como \"TOO-ple\", as\u00ed que eso es lo que yo uso. Al igual que el debate sobre la \"G\" dura o la \"G\" suave, estoy seguro de que hay quienes piensan que este debate es de suma importancia y est\u00e1n convencidos de que su pronunciaci\u00f3n es la \u00fanica verdadera. Pero.., <a href=\"https:\/\/english.stackexchange.com\/questions\/12980\/how-to-pronounce-tuple\">ambos son aceptables<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Si tienes preguntas sobre las tuplas, estar\u00e9 encantado de ayudarte. Tambi\u00e9n puedes ponerte en contacto conmigo en <a href=\"https:\/\/twitter.com\/mgroves\">Twitter @mgroves<\/a> o env\u00edeme un correo electr\u00f3nico <a href=\"mailto:matthew.groves@couchbase.com\">matthew.groves@couchbase.com<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Si tienes alguna pregunta sobre el SDK .NET de Couchbase que he utilizado en este post, no dudes en preguntar en la secci\u00f3n <a href=\"https:\/\/www.couchbase.com\/blog\/es\/forums\/c\/net-sdk\/6\/\">Foros de Couchbase .NET<\/a>. Consulte tambi\u00e9n el <a href=\"https:\/\/www.couchbase.com\/blog\/es\/developers\/\">Portal para desarrolladores de Couchbase<\/a> para obtener m\u00e1s informaci\u00f3n sobre el SDK .NET y Couchbase en general.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>C# tuples are a new feature of C# 7. I\u2019m going to show you the basics of how C# tuples work. I\u2019m also going to mix in a little Couchbase to show tuples in action. However, if you don\u2019t want [&hellip;]<\/p>","protected":false},"author":71,"featured_media":3176,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1811,10127,1816],"tags":[],"ppma_author":[8937],"class_list":["post-3175","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-c-sharp","category-couchbase-server"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.0 (Yoast SEO v26.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>C# Tuples Language Feature | Basics of How C# Tuples Work<\/title>\n<meta name=\"description\" content=\"C# tuples are a new feature of C# 7. Learn the basics of how C# tuples work from this post, including a mix of a little Couchbase to show tuples in action.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/csharp-tuples-new-csharp-7-feature\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C# Tuples: New C# 7 language feature\" \/>\n<meta property=\"og:description\" content=\"C# tuples are a new feature of C# 7. Learn the basics of how C# tuples work from this post, including a mix of a little Couchbase to show tuples in action.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/csharp-tuples-new-csharp-7-feature\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-04-06T13:00:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:57:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/063-hero-infinite-mirror.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"818\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Matthew Groves\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mgroves\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthew Groves\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"C# Tuples: New C# 7 language feature\",\"datePublished\":\"2017-04-06T13:00:32+00:00\",\"dateModified\":\"2025-06-14T03:57:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/\"},\"wordCount\":820,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/063-hero-infinite-mirror.jpg\",\"articleSection\":[\".NET\",\"C#\",\"Couchbase Server\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/\",\"name\":\"C# Tuples Language Feature | Basics of How C# Tuples Work\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/063-hero-infinite-mirror.jpg\",\"datePublished\":\"2017-04-06T13:00:32+00:00\",\"dateModified\":\"2025-06-14T03:57:09+00:00\",\"description\":\"C# tuples are a new feature of C# 7. Learn the basics of how C# tuples work from this post, including a mix of a little Couchbase to show tuples in action.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/063-hero-infinite-mirror.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/063-hero-infinite-mirror.jpg\",\"width\":1920,\"height\":818,\"caption\":\"Infinite Mirror\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C# Tuples: New C# 7 language feature\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\",\"name\":\"Matthew Groves\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"caption\":\"Matthew Groves\"},\"description\":\"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.\",\"sameAs\":[\"https:\/\/crosscuttingconcerns.com\",\"https:\/\/x.com\/mgroves\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/matthew-groves\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"C# Tuples Language Feature | Basics of How C# Tuples Work","description":"C# tuples are a new feature of C# 7. Learn the basics of how C# tuples work from this post, including a mix of a little Couchbase to show tuples in action.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/es\/csharp-tuples-new-csharp-7-feature\/","og_locale":"es_MX","og_type":"article","og_title":"C# Tuples: New C# 7 language feature","og_description":"C# tuples are a new feature of C# 7. Learn the basics of how C# tuples work from this post, including a mix of a little Couchbase to show tuples in action.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/csharp-tuples-new-csharp-7-feature\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-04-06T13:00:32+00:00","article_modified_time":"2025-06-14T03:57:09+00:00","og_image":[{"width":1920,"height":818,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/063-hero-infinite-mirror.jpg","type":"image\/jpeg"}],"author":"Matthew Groves","twitter_card":"summary_large_image","twitter_creator":"@mgroves","twitter_misc":{"Written by":"Matthew Groves","Est. reading time":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"C# Tuples: New C# 7 language feature","datePublished":"2017-04-06T13:00:32+00:00","dateModified":"2025-06-14T03:57:09+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/"},"wordCount":820,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/063-hero-infinite-mirror.jpg","articleSection":[".NET","C#","Couchbase Server"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/","url":"https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/","name":"C# Tuples Language Feature | Basics of How C# Tuples Work","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/063-hero-infinite-mirror.jpg","datePublished":"2017-04-06T13:00:32+00:00","dateModified":"2025-06-14T03:57:09+00:00","description":"C# tuples are a new feature of C# 7. Learn the basics of how C# tuples work from this post, including a mix of a little Couchbase to show tuples in action.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/063-hero-infinite-mirror.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/063-hero-infinite-mirror.jpg","width":1920,"height":818,"caption":"Infinite Mirror"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"C# Tuples: New C# 7 language feature"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58","name":"Matthew Groves","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54","url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","caption":"Matthew Groves"},"description":"A Matthew D. Groves le encanta programar. No importa si se trata de C#, jQuery o PHP: enviar\u00e1 pull requests para cualquier cosa. Lleva codificando profesionalmente desde que escribi\u00f3 una aplicaci\u00f3n de punto de venta en QuickBASIC para la pizzer\u00eda de sus padres, all\u00e1 por los a\u00f1os noventa. Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores. Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/matthew-groves\/"}]}},"authors":[{"term_id":8937,"user_id":71,"is_guest":0,"slug":"matthew-groves","display_name":"Matthew Groves","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","author_category":"","last_name":"Groves","first_name":"Matthew","job_title":"","user_url":"https:\/\/crosscuttingconcerns.com","description":"A Matthew D. Groves le encanta programar.  No importa si se trata de C#, jQuery o PHP: enviar\u00e1 pull requests para cualquier cosa.  Lleva codificando profesionalmente desde que escribi\u00f3 una aplicaci\u00f3n de punto de venta en QuickBASIC para la pizzer\u00eda de sus padres, all\u00e1 por los a\u00f1os noventa.  Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores.  Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/3175","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=3175"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/3175\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/3176"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=3175"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=3175"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=3175"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=3175"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}