在这种情况下,为什么最好使用StringComparison.Ordinal?
作者:互联网
我有以下代码:
var whackPos = str.IndexOf("/");
… Resharper建议将其更改为:
var whackPos = str.IndexOf("/", StringComparison.Ordinal);
我知道有时候为什么它很好,并且它和InvariantCulture here之间也有区别,但是我不明白为什么建议将它推荐给一些旧的打怪(“ /”).
这真的是找到前锋的更安全方法,还是Resharper过于顽强的案例?
更新
对于某些事情,Resharper建议使用InvariantCulture.例如,此代码:
percentageQtyShippedCell.Value2 = _percentageOfQtyShipped.ToString();
…已更改为:
percentageQtyShippedCell.Value2 = _percentageOfQtyShipped.ToString(CultureInfo.InvariantCulture);
……在瑞沙珀(Resharper)敏锐的挑衅下.那么,为什么有时选择InvariantCulture,而有时选择Ordinal?
解决方法:
IndexOf()的单参数版本使用特定于区域性的比较.根据代码的运行位置,它的行为会有所不同.在许多情况下,比较Ordinal或InvariantCulture更为合适.这就是Resharper的建议.当您寻找’/’时,Ordinal就足够了,它也是最简单,最快的比较类型,因此Resharper建议这样做.
对于确实要使用区域性敏感的比较的情况,只需指定StringComparison.CurrentCulture,Resharper就会假定您知道自己在做什么.我知道您没有询问最后一部分.只是为了完整性而添加它.
标签:resharper,string-comparison,c 来源: https://codeday.me/bug/20191119/2033546.html