4

我正在查看System.String,我想知道为什么EndsWithandStartsWith方法在它们可以采用的参数方面不是对称的。

具体来说,为什么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)
4

2 回答 2

5

在 ILSpy 中,这种重载似乎绝大多数在 IO 代码中被称为

s.EndsWith(Path.DirectorySeparatorChar)

大概这只是 C# 团队认为必须避免重复代码很有用的东西。

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

于 2012-12-13T15:21:20.563 回答
3

这是一种内部方法,仅在以下 8 种方法中使用mscorlib

  • System.Security.Util.StringExpressionSet.CanonicalizePath(字符串路径,布尔需要全路径):字符串
  • System.IO.IsolatedStorage.IsolatedStorageFile.DirectoryExists(字符串路径):布尔
  • System.IO.Directory.GetDemandDir(string fullPath, bool thisDirOnly):string
  • System.IO.DirectoryInfo.GetDirName(string fullPath):string
  • System.Security.Util.URLString.IsRelativeFileUrl:bool
  • System.IO.DirectoryInfo.MoveTo(字符串 destDirName):void
  • System.IO.DirectoryInfo.Parent:DirectoryInfo
  • System.Globalization.CultureData.SENGDISPLAYNAME:字符串

可能只是为了方便和代码重用:)

于 2012-12-13T15:22:45.310 回答