Does calling .Last() on an IList iterate the entire list?
<p>Does the <code>.Last()</code> extension method take into account if it's called on an <code>IList</code>?  I'm just wondering if there's a significant performance difference between these:</p>

<pre><code>IList&lt;int&gt; numbers = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

int lastNumber1 = numbers.Last();
int lastNumber2 = numbers[numbers.Count-1];
</code></pre>

<p>Intuition tells me that the first alternative is O(n) but the second is O(1).  Is <code>.Last()</code> "smart" enough to try casting it to an <code>IList</code>?</p>
