{"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\/pt\/csharp-tuples-new-csharp-7-feature\/","title":{"rendered":"Tuplas do C#: Novo recurso de linguagem do C# 7"},"content":{"rendered":"<div class=\"paragraph\">\n<div class=\"paragraph\">\n<p>As tuplas do C# s\u00e3o um novo recurso do C# 7. Vou lhe mostrar os conceitos b\u00e1sicos de como as tuplas do C# funcionam. Tamb\u00e9m vou misturar um pouco de Couchbase para mostrar as tuplas em a\u00e7\u00e3o. No entanto, se voc\u00ea n\u00e3o quiser <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/downloads\/\">instalar o Couchbase<\/a> apenas para brincar com tuplas, n\u00e3o se preocupe, voc\u00ea ainda poder\u00e1 acompanhar o processo.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>O <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/tree\/master\/Groves\/063TuplesCSharp7\/tuples-example\">O c\u00f3digo-fonte que usei para esta postagem do blog est\u00e1 dispon\u00edvel no GitHub<\/a> para voc\u00ea experimentar, se quiser.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><em>Observa\u00e7\u00e3o: Se voc\u00ea estiver usando o C# h\u00e1 algum tempo, talvez se lembre do <a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/system.tuple(v=vs.110).aspx\">Classe Tuple que foi introduzida no .NET 4<\/a>. Essa classe ainda existe, mas n\u00e3o \u00e9 a mesma coisa que o novo recurso de tupla do C#.<\/em><\/p>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_what_are_c_tuples\">O que s\u00e3o tuplas C#?<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Uma \"tupla\" \u00e9 o nome de um conceito matem\u00e1tico que \u00e9 apenas uma lista de elementos. Na fam\u00edlia de linguagens LISP, a codifica\u00e7\u00e3o \u00e9 constru\u00edda quase que inteiramente em torno da ideia de que tudo \u00e9 uma lista. Mais uma vez, o C# pega emprestado o n\u00facleo de uma ideia do mundo da programa\u00e7\u00e3o funcional e o integra em uma linguagem n\u00e3o funcional. Assim, temos as tuplas do C# (confira o <a href=\"https:\/\/github.com\/dotnet\/roslyn\/issues\/347\">Proposta original da tupla C# por Mads Torgersen<\/a> para obter mais detalhes e informa\u00e7\u00f5es b\u00e1sicas).<\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_remember_anonymous_types\">Lembra-se dos tipos an\u00f4nimos?<\/h3>\n<div class=\"paragraph\">\n<p>Mas, para simplificar, vamos considerar algo com o qual voc\u00ea j\u00e1 deve estar familiarizado no C#, um tipo an\u00f4nimo. Em resumo, voc\u00ea pode instanciar um novo objeto sem especificar um 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>Nos bastidores, h\u00e1 de fato <em>\u00e9<\/em> um tipo que herda da base <code>Objeto<\/code> mas, de modo geral, lidamos apenas com o objeto, n\u00e3o com seu tipo.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Al\u00e9m disso, n\u00e3o posso retornar um tipo an\u00f4nimo de um m\u00e9todo ou passar um tipo an\u00f4nimo como par\u00e2metro sem perder as informa\u00e7\u00f5es de tipo no processo.<\/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>Eles s\u00e3o \u00fateis, sem d\u00favida, mas geralmente me refiro a eles como an\u00f4nimos <em>objetos<\/em> como eu as uso, por esses motivos.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_what_s_this_got_to_do_with_c_tuples\">O que isso tem a ver com as tuplas C#?<\/h3>\n<div class=\"paragraph\">\n<p>Penso nas tuplas do C# como uma forma de fazer com que o C# retorne tipos an\u00f4nimos, mas com informa\u00e7\u00f5es mais ricas. Elas s\u00e3o uma forma de criar uma \"classe\" em tempo real sem realmente definir uma classe. A sintaxe das tuplas consiste simplesmente em colocar par\u00eanteses em torno de uma lista de tipos e nomes separados por v\u00edrgulas. Um literal de tupla \u00e9 apenas uma lista de literais separados por v\u00edrgula, tamb\u00e9m cercada por par\u00eanteses. Por exemplo:<\/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>Observa\u00e7\u00e3o: No momento, estou preferindo o PascalCase para propriedades de tuplas. N\u00e3o sei se essa \u00e9 a diretriz oficial ou n\u00e3o, mas me parece correta.<\/em><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_c_tuples_in_action\">Tuplas C# em a\u00e7\u00e3o<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Coloquei as tuplas para trabalhar em um aplicativo de console simples que interage com o Couchbase.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Eu criei um <code>Ajudante de balde<\/code> que \u00e9 uma fachada muito simples sobre a classe normal do Couchbase <code>IBucket<\/code>. Essa classe tem dois m\u00e9todos: um para obter um documento por chave e retornar uma tupla, e outro para inserir uma tupla como um 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 esse auxiliar, voc\u00ea s\u00f3 precisa passar um <code>IBucket<\/code> no construtor.<\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_tuple_as_a_return_type\">Tuple como um tipo de retorno<\/h3>\n<div class=\"paragraph\">\n<p>Voc\u00ea pode ent\u00e3o usar o <code>GetTuple<\/code> para obter um documento do Couchbase como uma 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>A tupla consistir\u00e1 em uma cadeia de caracteres (a chave do documento) e um objeto de qualquer tipo que voc\u00ea especificar. O conte\u00fado do documento \u00e9 JSON e ser\u00e1 serializado em um objeto C# pelo SDK do .NET.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Al\u00e9m disso, observe que o nome das propriedades da tupla n\u00e3o precisa ser igual. Eu usei <code>obj<\/code> em <code>Ajudante de balde<\/code> mas eu usei <code>filme<\/code> quando liguei para <code>GetTuple<\/code>. Os tipos precisam corresponder, \u00e9 claro.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_tuple_as_a_parameter_type\">Tuple como um tipo de par\u00e2metro<\/h3>\n<div class=\"paragraph\">\n<p>Tamb\u00e9m posso fazer o caminho inverso e passar uma tupla como par\u00e2metro para <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>O <code>Gerar filme aleat\u00f3rio<\/code> retorna um <code>Filme<\/code> com alguns valores aleat\u00f3rios (confira o <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/tree\/master\/Groves\/063TuplesCSharp7\/tuples-example\">Fonte do GitHub<\/a> para obter detalhes). Uma tupla de <code>(string, filme)<\/code> \u00e9 passado para <code>InsertTuple<\/code>. O SDK do Couchbase .NET faz isso e insere um documento com a chave\/valor apropriado.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Ao executar o aplicativo do console, voc\u00ea deve obter um resultado parecido com este:<\/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>Observe que, no momento, o SDK do Couchbase .NET n\u00e3o tem nenhum suporte direto a tuplas e talvez nunca precise dele. Esse c\u00f3digo serve apenas para ajudar a demonstrar as tuplas C#. Eu n\u00e3o recomendaria o uso do BucketHelper como est\u00e1 na produ\u00e7\u00e3o.<\/em><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_tuh_ple_or_too_ple\">TUH-ple ou TOO-ple?<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Parece que me lembro de meu(s) professor(es) pronunciando-o como \"TOO-ple\", ent\u00e3o \u00e9 isso que eu uso. Assim como o debate hard-G \/ soft-G de \"GIF\", tenho certeza de que h\u00e1 pessoas que acham que esse debate \u00e9 da maior import\u00e2ncia e est\u00e3o convencidas de que sua pron\u00fancia \u00e9 a \u00fanica verdadeira. Mas, <a href=\"https:\/\/english.stackexchange.com\/questions\/12980\/how-to-pronounce-tuple\">ambos s\u00e3o aceit\u00e1veis<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Se voc\u00ea tiver d\u00favidas sobre tuplas, terei prazer em ajudar. Voc\u00ea tamb\u00e9m pode entrar em contato comigo em <a href=\"https:\/\/twitter.com\/mgroves\">Twitter @mgroves<\/a> ou envie-me um e-mail <a href=\"mailto:matthew.groves@couchbase.com\">matthew.groves@couchbase.com<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Se voc\u00ea tiver d\u00favidas sobre o SDK do Couchbase .NET que usei nesta postagem, pergunte na se\u00e7\u00e3o <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/forums\/c\/net-sdk\/6\/\">F\u00f3runs do Couchbase .NET<\/a>. Confira tamb\u00e9m o <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/developers\/\">Portal do desenvolvedor do Couchbase<\/a> para obter mais informa\u00e7\u00f5es sobre o .NET SDK e o Couchbase em geral.<\/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 v25.7.1 (Yoast SEO v25.7) - 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\/pt\/csharp-tuples-new-csharp-7-feature\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\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\/pt\/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\":\"pt-BR\",\"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\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\",\"@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\/pt\/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\/pt\/csharp-tuples-new-csharp-7-feature\/","og_locale":"pt_BR","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\/pt\/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":"pt-BR","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":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/csharp-tuples-new-csharp-7-feature\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@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":"Blog do Couchbase","description":"Couchbase, o banco de dados 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":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@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":"pt-BR","@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 \u00e9 um cara que adora programar. N\u00e3o importa se \u00e9 C#, jQuery ou PHP: ele enviar\u00e1 solicita\u00e7\u00f5es de pull para qualquer coisa. Ele tem programado profissionalmente desde que escreveu um aplicativo de ponto de venda QuickBASIC para a pizzaria de seus pais nos anos 90. Atualmente, ele trabalha como gerente s\u00eanior de marketing de produtos da Couchbase. Seu tempo livre \u00e9 passado com a fam\u00edlia, assistindo aos Reds e participando da comunidade de desenvolvedores. Ele \u00e9 autor de AOP in .NET, Pro Microservices in .NET, autor da Pluralsight e Microsoft MVP.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/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","first_name":"Matthew","last_name":"Groves","user_url":"https:\/\/crosscuttingconcerns.com","author_category":"","description":"Matthew D. Groves \u00e9 um cara que adora programar.  N\u00e3o importa se \u00e9 C#, jQuery ou PHP: ele enviar\u00e1 solicita\u00e7\u00f5es de pull para qualquer coisa.  Ele tem programado profissionalmente desde que escreveu um aplicativo de ponto de venda QuickBASIC para a pizzaria de seus pais nos anos 90.  Atualmente, ele trabalha como gerente s\u00eanior de marketing de produtos da Couchbase. Seu tempo livre \u00e9 passado com a fam\u00edlia, assistindo aos Reds e participando da comunidade de desenvolvedores.  Ele \u00e9 autor de AOP in .NET, Pro Microservices in .NET, autor da Pluralsight e Microsoft MVP."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/3175","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=3175"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/3175\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/3176"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=3175"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=3175"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=3175"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=3175"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}