为什么在这种情况下使用 StringComparison.Ordinal 被认为更可取?

Why is using StringComparison.Ordinal considered preferable in this situation?

我有这个代码:

var whackPos = str.IndexOf("/");

...Resharper 推荐更改为:

var whackPos = str.IndexOf("/", StringComparison.Ordinal);

我明白为什么它有时很好,以及它与 InvariantCulture 之间的区别 here,但我不明白为什么它会被推荐给一些老东西(“/”)。

这真的是一种更安全的查找 forwardwhacks 的方法,还是 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 将假设您知道自己在做什么。我知道你没有问过这最后一部分。只是为了完整性添加它。