我有这段代码:
var whackPos = str.IndexOf("/");
... Resharper建议改为:
var whackPos = str.IndexOf("/", StringComparison.Ordinal);
我知道为什么它有时会很好,而且它与InvariantCulture here之间存在差异,但是我不明白为什么这会被推荐用于旧的重击(" /&# 34。)
这真的是一种更安全的方式来发现前瞻性,还是一个Resharper过于苛刻的案例?
对于某些事情,Resharper建议使用InvariantCulture。例如,这段代码:
percentageQtyShippedCell.Value2 = _percentageOfQtyShipped.ToString();
......改为:
percentageQtyShippedCell.Value2 = _percentageOfQtyShipped.ToString(CultureInfo.InvariantCulture);
......在Resharper的明智的刺激下。那么为什么它有时选择InvariantCulture,有时选择Ordinal?
答案 0 :(得分:3)
IndexOf()
的单参数版本使用特定于文化的比较。它的行为会有所不同,具体取决于您运行代码的位置。在许多情况下,Ordinal或InvariantCulture比较更合适。这就是Resharper推荐的。当你寻找'/'时,Ordinal就足够了,它也恰好是最简单和最快的比较类型,所以这就是Resharper所推荐的。
对于您确实想要使用区分文化的比较的情况,只需指定StringComparison.CurrentCulture
,Resharper将假设您知道自己在做什么。我知道你没有问过这最后一部分。只需添加它就可以完成。