title: Detect if an object is a ValueTuple
body: <p>I have a use case where I need to check if a value is a C# 7 ValueTuple, and if so, loop through each of the items.  I tried checking with <code>obj is ValueTuple</code> and <code>obj is (object, object)</code> but both of those return false.  I found that I could use <code>obj.GetType().Name</code> and check if it starts with <code>"ValueTuple"</code> but that seems lame to me.  Any alternatives would be welcomed.</p>
  
  <p>I also have the issue of getting each item.  I attempted to get <code>Item1</code> with the solution found here: <a href="https://stackoverflow.com/questions/9956648/how-do-i-check-if-a-property-exists-on-a-dynamic-anonymous-type-in-c">How do I check if a property exists on a dynamic anonymous type in c#?</a> but <code>((dynamic)obj).GetType().GetProperty("Item1")</code> returns null.  My hope was that I could then do a <code>while</code> to get each item.  But this does not work.  How can I get each item?</p>
  
  <p><strong>Update - more code</strong></p>
  
  <pre><code>if (item is ValueTuple) //this does not work, but I can do a GetType and check the name
  {
      object tupleValue;
      int nth = 1;
      while ((tupleValue = ((dynamic)item).GetType().GetProperty($"Item{nth}")) != null &amp;&amp; //this does not work
          nth &lt;= 8)      
      {
          nth++;
          //Do stuff
      }
  }
  </code></pre>