title: Compiler does not seem to be aware of the base type of objects in a list
body: <p>I am refactoring the logging section of our code and have come across something which I just cannot wrap my head around.</p>
  
  <p>We have an interface <code>ILogRecord</code> and an object call <code>LogDataRecord</code> which implements another interface <code>IUserLog</code> which in turn implements <code>ILogRecord</code>.</p>
  
  <p>I have used the following style of code in lots of places and it has worked fine</p>
  
  <pre><code>        LogDataRecord ldr = new LogDataRecord( ... );
          ILogRecord logrecord = ldr;
  </code></pre>
  
  <p>I however cannot understand why the following piece of code is not happy</p>
  
  <pre><code>        logs = LogHelpers.LoadCSV( ... ));
  </code></pre>
  
  <p><code>LoadCSV</code> return type is <code>List&lt;LogDataRecord&gt;</code> and logs is of type <code>List&lt;ILogRecord&gt;</code> I have managed to solve it by using.</p>
  
  <pre><code>        logs = new List&lt;ILogRecord&gt;(LogHelpers.LoadCSV( ... ));
  </code></pre>
  
  <p>My assumption is that the compiler cannot infer any base types of a collection but I don't understand why it can't look that deep down.</p>