<p>It seems that a List object cannot be stored in a List variable in C#, and can't even be explicitly cast that way.</p>

<pre><code>List&lt;string&gt; sl = new List&lt;string&gt;();
List&lt;object&gt; ol;
ol = sl;
</code></pre>

<p>results in Cannot implicitly convert type <code>System.Collections.Generic.List&lt;string&gt;</code> to <code>System.Collections.Generic.List&lt;object&gt;</code></p>

<p>And then...</p>

<pre><code>List&lt;string&gt; sl = new List&lt;string&gt;();
List&lt;object&gt; ol;
ol = (List&lt;object&gt;)sl;
</code></pre>

<p>results in Cannot convert type <code>System.Collections.Generic.List&lt;string&gt;</code> to <code>System.Collections.Generic.List&lt;object&gt;</code></p>

<p>Of course, you can do it by pulling everything out of the string list and putting it back in one at a time, but it is a rather convoluted solution.</p>

The reason is that a generic class like
```
List<>
```
is, for most purposes, treated externally as a normal class. e.g. when you say
```
List<string>()
```
the compiler says
```
ListString()
```
(which contains strings). [Technical folk: this is an extremely plain-English-ified version of what's going on]
Consequently, obviously the compiler can't be smart enough to convert a ListString to a ListObject by casting the items of its internal collection.
That's why there's extension methods for IEnumerable like Convert() that allow you to easily supply conversion for the items stored inside a collection, which could be as simple as casting from one to another.