为什么System.String.EndsWith()有一个char重载而System.String.StartsWith()没有?

Ian*_*ien 4 .net c# string char

我正在浏览System.String,我想知道为什么EndsWithStartsWith方法在参数方面不对称.

具体来说,为什么不System.String.EndsWith支持char参数System.String.StartsWith?这是因为任何限制或设计特征吗?

// 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 && (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)
Run Code Online (Sandbox Code Playgroud)

Raw*_*ing 5

看看ILSpy,这个重载似乎压倒性地在IO代码中被调用

s.EndsWith(Path.DirectorySeparatorChar)
Run Code Online (Sandbox Code Playgroud)

据推测,这只是C#团队认为必须避免重复代码有用的东西.

请注意,在开始时(s[0] == cvs s[s.Length - 1] == c)进行此检查要容易得多,这也可以解释为什么他们不打算StartsWith过载.