title: Nullable Value Tuples issue
body: <p>I'm trying to update my code to use the new value tuples, and overall it's making it a lot more readable, so I love it.</p>
  
  <p>However, I've ran into issues working with nullable values. In particular I have either collection entries that have to be <code>null</code> or functions that return <code>null</code> values under certain conditions. For example:</p>
  
  <pre><code>internal static TValue SafeTryGet&lt;TKey, TValue&gt;(this IDictionary&lt;TKey, TValue&gt; list, TKey key) =&gt;
          list.TryGetValue(key, out TValue ret) ? ret : default(TValue);
  </code></pre>
  
  <p>This works fine with normal <code>Tuple&lt;&gt;</code> objects since they're classes, but value types will never return <code>null</code> which breaks this.  </p>
  
  <p>I've tried something like the below, but overloading resolution doesn't account for this case, it just gives a compilation error:</p>
  
  <pre><code>internal static TValue SafeTryGet&lt;TKey, TValue&gt;(this IDictionary&lt;TKey, TValue&gt; list, TKey key) where TValue : class =&gt;
          list.TryGetValue(key, out TValue ret) ? ret : default(TValue);
  
  internal static TValue? SafeTryGet&lt;TKey, TValue&gt;(this IDictionary&lt;TKey, TValue&gt; list, TKey key) where TValue : struct =&gt;
          list.TryGetValue(key, out TValue ret) ? ret : new TValue?();
  </code></pre>
  
  <p>Short of providing a new method that does this, is there a <strong>clean</strong> way of writing this to return a nullable type when <code>TValue</code> is a <code>struct</code>? I emphasize the word clean because I can obviously code around it, but I'd like a semantic solution to the issue rather than a brute force approach.</p>
  
  <p><strong>Keep in mind</strong> that the same issue happens with the <code>FirstOrDefault()</code> Linq method. It won't return <code>null</code>, which makes it rather useless in this context. I'd like a solution that addresses this too if possible.</p>
  
  <p>Edit: Please keep in mind the Linq issue. <strong>This is not a duplicate</strong> of that other post, because their requirements were more flexible. I'd like to make Linq work with value tuples as normal if possible. </p>