繁体   English   中英

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

[英]Why does System.String.EndsWith() have a a char overload and System.String.StartsWith() does not?

我正在查看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)

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

s.EndsWith(Path.DirectorySeparatorChar)

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

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

这是一个内部方法,仅用于mscorlib中的以下8个方法:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM