title: Superfluous Code Contracts suggestions
body: <p>I have the following method:</p>
  
  <pre><code>static bool TextEquals(string text, char[] array, int start, int length)
  {
      Contract.Requires(text != null);
      Contract.Requires(text.Length != length
                        || text.Length == 0
                        || (array != null &amp;&amp; start &gt;= 0 &amp;&amp; start &lt; array.Length));
  
      if (text.Length != length)
      {
          return false;
      }
  
      for (var i = 0; i &lt; text.Length; ++i)
      {
          if (text[i] != array[start + i])
          {
              return false;
          }
      }
  
      return true;
  }
  </code></pre>
  
  <p>However, Code Contracts is suggesting I add the following:</p>
  
  <pre><code>Contracts.Requires(text.Length == 0 || array != null || start &lt; array.Length);
  Contracts.Requires(text.Length == 0 || start &lt; 0 || start &lt; array.Length);
  </code></pre>
  
  <p>I am not seeing the added benefit of these two additional requirements. What path(s) are covered that the already existing requirements do not cover?</p>
  
  <p>In particular, I do not see the case <code>array == null &amp;&amp; start &lt; array.Length</code>, which would be allowed by the first suggestion.</p>
  
  <p>Is there any way to remove such suggestions?</p>