title: Why does System.String.EndsWith() have a a char overload and System.String.StartsWith() does not?
body: <p>I was looking through <code>System.String</code> and I was wondering why the <code>EndsWith</code> and <code>StartsWith</code> methods aren't symmetric in terms of parameters they can take.</p>
  
  <p>Specifically, why does <code>System.String.EndsWith</code> support a char parameter while <code>System.String.StartsWith</code> does not? Is this because of any limitation or design feature?</p>
  
  <pre><code>// System.String.EndsWith method signatures
  [__DynamicallyInvokable]
  public bool EndsWith(string value)
  
  [ComVisible(false)]
  [SecuritySafeCritical]
  [__DynamicallyInvokable]
  public bool EndsWith(string value, StringComparison comparisonType)
  
  public bool EndsWith(string value, bool ignoreCase, CultureInfo culture)
  
  [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
  internal bool EndsWith(char value)
  {
    int length = this.Length;
    return length != 0 &amp;&amp; (int) this[length - 1] == (int) value;
  }
  
  // System.String.StartsWith method signatures
  [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
  [__DynamicallyInvokable]
  public bool StartsWith(string value)
  
  [SecuritySafeCritical]
  [ComVisible(false)]
  [__DynamicallyInvokable]
  public bool StartsWith(string value, StringComparison comparisonType)
  
  public bool StartsWith(string value, bool ignoreCase, CultureInfo culture)
  </code></pre>