title: is there an easier way to reverse the order of a DataGridViewSelectedRowCollection?
body: <p>For some strange reason, a <code>DataGridViewSelectedRowCollection</code> is populated in reverse order from what is displayed in the<code>DataGridView</code>. But what is more puzzling is why there isn't a straightforward way of reversing the order to use in a <code>foreach</code> loop. </p>
  
  <p>I would like to be able to use syntax as simple as this:</p>
  
  <pre><code>foreach (DataGridViewRow r in dataGridView1.SelectedRows.Reverse())
  </code></pre>
  
  <p>...but of course, that is not supported.*</p>
  
  <p>So, currently I am using this monstrosity:</p>
  
  <pre><code>//reverse the default selection order:
  IEnumerable&lt;DataGridViewRow&gt; properlyOrderedSelectedRows 
           = dataGridView1.SelectedRows.Cast&lt;DataGridViewRow&gt;().ToArray().Reverse();
  foreach (DataGridViewRow r in properlyOrderedSelectedRows )
  {
      MessageBox.Show( r.Cells["ID"].Value.ToString());
  }
  </code></pre>
  
  <p>...which is terribly ugly and convoluted. (I realize I could use a reverse <code>For</code> loop, but I prefer the <code>foreach</code> for its readability.)</p>
  
  <p>What am I missing here? Is there a simpler approach?</p>
  
  <p>*<sub>Actually, I would have expected this version to work, according to the <a href="https://stackoverflow.com/a/1211610/93394">discussion here</a>, since <code>DataGridViewSelectedRowCollection</code> <a href="https://msdn.microsoft.com/en-us/library/vstudio/system.windows.forms.datagridviewselectedrowcollection(v=vs.100).aspx" rel="nofollow noreferrer">implements IEnumerable</a>; but it doesn't compile.</sub></p>