title: List.AddRange throwing null argument exception despite null test
body: <p>I have the lines </p>
  
  <pre><code> if(query.GetRecordsFromResults() != null)
   RecordsList.AddRange(query.GetRecordsFromResults());
  </code></pre>
  
  <p>Where <code>GetRecordsFromResults()</code> returns <code>IList&lt;IRecord&gt;</code>. Despite the if condition, i get <code>System.ArgumentNullException</code>. Why is that ?</p>
  
  <p>The faulty method :</p>
  
  <pre><code> foreach (var query in QueryList)
   {
      query.ExecutePreparedQuery();
      if(query.GetRecordsFromResults() != null)
      RecordsList.AddRange(query.GetRecordsFromResults());
   }
  </code></pre>
  
  <p><code>QueryList</code> is a <code>List&lt;Query&gt;</code>, <code>query</code> is a <code>Query</code>. Both are implemented, instantiated and initialised (verified).</p>
  
  <pre><code> public override IList&lt;IRecords&gt; GetRecordsFromResults()
   {
     var recordsList = new List&lt;IRecords&gt;();
  
     if (Result != null &amp;&amp; Result.Count != 0)
     {
        RecordBuilder.Value = Result.Count;
        RecordBuilder.Querytype = QueryDescription();
        RecordBuilder.Dateformatted = DateFormatting();
        RecordBuilder.WebTitle = Web.Title;
  
        recordsList.Add(RecordBuilder.BuildRecord());
  
        return recordsList;
   }
  
        RecordBuilder.Value = 0;
        RecordBuilder.Querytype = QueryDescription();
        RecordBuilder.Dateformatted = DateFormatting();
        RecordBuilder.WebTitle = Web.Title;
  
        recordsList.Add(RecordBuilder.BuildRecord());
  
        return recordsList;
  }
  </code></pre>
  
  <p><code>Result</code> is a <code>Query</code>'s property, updated during the call of <code>Query.ExecutePreparedQuery</code>. It may be null if the query failed.
  <code>RecordBuilder</code> is a builder for <code>IRecord</code> implementations, it is a bunch of string and int properties. 
  <code>QueryDescription</code> is a self-describing method of <code>Query</code> returning a string.
  <code>DateFormating</code> returns a string from a <code>DateTime</code> property.</p>
  
  <p>The environement is not multithreaded, <code>Query</code> is an abstract class, the shown <code>GetRecordFromResults</code> is the override in an abstract child class (below that other child class are real implementations).</p>