CLR via C# System.String 类型 比较字符串

“比较”或许是最常见的字符串操作。一般因为两个原因要比较字符串:判断相等性或者排序。

判断字符串相等性或者排序时,强烈建议调用 String 类定义的以下方法之一:

 

 

 

排序时应该总是执行区分大小写的比较。原因是假如只是大小写不同的两个字符串被视为相等,那么每次排序都可能按不同顺序排列,用户会感到困惑。

其中 CompareOptions 定义如下:

接受 CompareOptions 实参的方法要求显式传递语言文化。

//--

许多程序都将字符串用于内部编程目的,比如路径名、文件名、URL、注册表项/值、环境变量、反射、XML标记、XML特性等。这些字符串通常只在程序内部使用,不想用户显示。出于编程目的而比较字符串时,应该总是使用 StringComparison.Ordinal 或者StringComparison.OrdinalIgnoreCase 。忽略语言文化是字符串比较最快的方式。

另一方面,要求语言文化正确的方式来比较字符串(通常是为了用户展示),就应该使用 StringComparison.CurrentCulture 或者 StringComparison.CurrentCultureIgnoreCase 。

//--

StringComparison.InvariantCulture 和 StringComparison.InvariantCultureIgnoreCase 平时最好不要用。虽然这两个值能保证比较时的语言文化正确性,但用来比较内部编程所需的字符串,所花的时间远超出序号比较。

//--

要在序号比较前更改字符串中的字符的大小写,应该使用 String 的 ToUpperInvariant 或 ToLowerInvariant 方法。强烈建议用ToUpperInvariant方法对字符串进行正规化(normalizing),而不用 ToLowerInvariant ,因为 Microsoft 对执行大写比较的代码进行了优化。事实上,执行不区分大小写的比较之前,FCL会自动将字符串正规化为大写形式。之所以要用 ToUpperInvariant 和 ToLowerInvariant 方法,是因为 String 类没有提供 ToUpperOrdinal 和 ToLowerOrdinal 方法。之所以不用 ToUpper 和 ToLower 方法,是因为它们对语言文化敏感。

//--

以语言文化正确的方式比较字符串时,有时需要指定另一种语言文化,而不是使用与调用线程关联的那一种。这时可用前面列出的 StartsWith,EndsWith 和 Compare 方法的重载版本,它们都接受 Boolean 和 CultureInfo 参数。

//--

除了前面列出的之外, String 类型还为 Equals,StartsWith,EndsWith 和 Compare 方法定义了其他几个重载版本。但是,Microsoft 建议避免使用这些额外的版本。除此之外,String 的其他比较方法---CompareTo(IComparable接口所要求实现的)、CompareOrdinal 以及 == 和 != 操作符---也应避免使用。之所以要避免使用这些方法和操作符,是因为调用者不显式指出以什么方式执行字符串比较,而你无法从方法名看出默认比较方式。例如,CompareTo 默认执行对语言文化敏感的比较,而 Equals 执行普通的序号比较。如果总是显式地指出以什么方式执行字符串比较,代码将更容易阅读和维护。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值