title: Why can't I use a nullable tuple for a nullable generic parameter
body: <p>So I wondered if you could create an extension method that would combine the functionality of <code>.Where()</code> and <code>.Select()</code> for the special case that it filters out null values of a list and keeps the types consistent with Nullable Reference Types. This means if I got an <code>string?[]</code> it would filter out all <code>null</code> values and return an <code>IEnumerable&lt;string&gt;</code> without nullable strings.</p>
  <p>However, when I try to filter out nullable tuples as shown below, I get the compiler error that the non-nullable tuple type was expected.
  Why does this solution work for all conventional types yet not for tuples and how can I change my extension method to also work for tuples.</p>
  <p><strong>Extension Method:</strong></p>
  <pre class="lang-cs prettyprint-override"><code>public static IEnumerable&lt;TResult&gt; SelectNotNull&lt;TSource, TResult&gt;
  (this IEnumerable&lt;TSource&gt; enumerable, Func&lt;TSource, TResult?&gt; selector)
  {
      foreach (var item in enumerable)
          if (selector(item) is { } result)
              yield return result;
  }
  </code></pre>
  <p><strong>Sample Code that produces the compiler error:</strong></p>
  <pre class="lang-cs prettyprint-override"><code>(string?, int)[] arr = Array.Empty&lt;(string?, int)&gt;();
  
  static (string, int)? Selector((string?, int) x)
  {
      return x.Item1 != null ? x : null;
  }
  
  arr.SelectNotNull&lt;(string?, int), (string, int)&gt;(Selector);
  </code></pre>