title: .NET 4.7 returning Tuples and nullable values
body: <p>Ok lets say I have this simple program in .NET 4.6:</p>
  
  <pre><code>using System;
  using System.Threading.Tasks;
  
  namespace ConsoleApp1
  {
      class Program
      {
          static async void Main()
          {
              var data = await Task.Run(() =&gt;
              {
                  try
                  {
                      return GetResults();
                  }
                  catch
                  {
                      return null;
                  }
              });
  
              Console.WriteLine(data);
          }
  
          private static Tuple&lt;int,int&gt; GetResults()
          {
              return new Tuple&lt;int,int&gt;(1,1);
          }
      }
  }
  </code></pre>
  
  <p>Works fine. So with .NET 4.7 we have the new Tuple value type. So if I convert this it becomes:</p>
  
  <pre><code>using System;
  using System.Threading.Tasks;
  
  namespace ConsoleApp1
  {
      class Program
      {
          static async void Main()
          {
              var data = await Task.Run(() =&gt;
              {
                  try
                  {
                      return GetResults();
                  }
                  catch
                  {
                      return null;
                  }
              });
  
              Console.WriteLine(data);
          }
  
          private static (int,int) GetResults()
          {
              return (1, 2);
          }
      }
  }
  </code></pre>
  
  <p>Great! Except it doesn't work. The new tuple value type is not nullable so this does not even compile. </p>
  
  <p>Anyone find a nice pattern to deal with this situation where you want to pass a value type tuple back but the result could also be null?</p>