title: In C# 7, How Can I Make a New ValueTuple from an Existing and New Elements?
body: <p>In C# 7 we have value tuples of the form <code>(a, b, c, ...)</code> and deconstruction of them (via <code>var (a, b, c, ...) = (a, b, c, ...)</code>).</p>
  
  <p>I have a tuple of the form <code>(row: &lt;int&gt;, column: &lt;int&gt;)</code>, and I want to create a <strong>new tuple</strong> of the form <code>(row: &lt;int&gt;, column: &lt;int&gt;, content: &lt;char&gt;)</code> using the previous one.</p>
  
  <p>In Python I can do:</p>
  
  <pre class="lang-py prettyprint-override"><code>existing = [1, 2]
  new = [*existing, 3]
  </code></pre>
  
  <p>Or with dicts:</p>
  
  <pre class="lang-py prettyprint-override"><code>existing = {'row':1, 'column':2}
  new = {**existing, 'content':'1'}
  </code></pre>
  
  <p>Is there a similar pattern in C#?</p>
  
  <p>I can of course deconstruct the tuple into variables, then recombine them:</p>
  
  <pre><code>var (row, column) = (row: 1, column: 2);
  var result = (row, column, content: '1');
  </code></pre>
  
  <p>However the actual situation is more complex. I have a <em>function</em> that returns the existing tuple, and an one-line function that constructs the new. If I simplify this it will be like:</p>
  
  <pre><code>private (int row, int column) ExistingTuple() =&gt; (row: 1, column: 2);
  
  private (int row, int column, char content) NewTuple() =&gt; (/* What should I do here */ExistingTuple(), content: '1');
  </code></pre>
  
  <p>For the simplicity and the readability, I want it as an arrow function (<code>T F() =&gt; E;</code>). If I would implement my suggestion, it will be seem like:</p>
  
  <pre><code>private (int row, int column, char content) NewTuple()
  {
      var (row, column) = ExistingTuple();
      return (row, column, content: '1');
  }
  </code></pre>
  
  <p>Is there a more elegant way to do that?</p>