.NET 5及以上版本中使用InvariantCultureIgnoreCase时IndexOf方法存在异常?
.NET 5及以上版本中使用InvariantCultureIgnoreCase时IndexOf方法存在异常?
嘿,我发现了一个在.NET 5及以上版本里,IndexOf方法搭配InvariantCultureIgnoreCase比较时的奇怪问题,跟你详细唠唠:
首先,先看这个基础的等价验证:用string.Equals比较"est"和"est",指定System.StringComparison.InvariantCultureIgnoreCase的话,结果是返回True——这是因为按照Unicode规范,字符st等价于"ST",所以这个结果是合理的。
接着看正常的IndexOf调用:
"est".IndexOf("est", System.StringComparison.InvariantCultureIgnoreCase) // 返回 0
返回0,这符合预期,毕竟我们已经确认两个字符串在该比较规则下是等价的。
但奇怪的地方来了!如果给源字符串前面加个空格,变成" est",再调用同样的方法:
" est".IndexOf("est", System.StringComparison.InvariantCultureIgnoreCase) // 返回 -1
结果居然返回-1,这就完全不符合预期了!明明按照之前的等价规则," est"里的"est"部分应该和"est"匹配才对,但实际就是找不到,太反常了。
备注:内容来源于stack exchange,提问作者nrofis
相关产品推荐
相关产品推荐

