title: Convert ValueTuple to IEnumerable
body: <p>Is there a saner way to do the following:</p>
  
  <pre><code>public static class ValueTupleAdditions {
    public static IEnumerable&lt;object&gt; ToEnumerable&lt;A, B&gt;(this ValueTuple&lt;A, B&gt; tuple) {
      yield return tuple.Item1;
      yield return tuple.Item2;
    }
    public static IEnumerable&lt;object&gt; ToEnumerable&lt;A, B, C&gt;(this ValueTuple&lt;A, B, C&gt; tuple) {
      yield return tuple.Item1;
      yield return tuple.Item2;
      yield return tuple.Item3;
    }
  
    [etc]
  }
  </code></pre>
  
  <p>EDIT: Since people are asking for a use case, here you go. </p>
  
  <pre><code>using Xunit;
  
  namespace Whatever {
  
    public class SomeTestClass {
      public static IEnumerable&lt;(string, Expression&lt;Func&lt;string, string&gt;&gt;, string)&gt; RawTestData() {
        yield return ("Hello", str =&gt; str.Substring(3), "lo");
        yield return ("World", str =&gt; str.Substring(0, 4), "worl");
      }
      public static IEnumerable&lt;object[]&gt; StringTestData() {
        return RawTestData().Select(vt =&gt; new object[] { vt.Item1, vt.Item2, vt.Item3 });
         // would prefer to call RawTestData().Select(vt =&gt; vt.ToArray()) here, but it doesn't exist.
      }
  
      [Theory, MemberData(nameof(StringTestData))]
      public void RunStringTest(string input, Expression&lt;Func&lt;string, string&gt;&gt; func, string expectedOutput) {
        var output = func.Compile()(input);
        Assert.Equal(expectedOutput, output);
      }
    }
  }
  </code></pre>