为什么在这种情况下使用StringComparison.Ordinal被认为是更好的?

时间:2016-01-29 18:32:14

标签: c# resharper string-comparison

我有这段代码:

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?

1 个答案:

答案 0 :(得分:3)

IndexOf()的单参数版本使用特定于文化的比较。它的行为会有所不同,具体取决于您运行代码的位置。在许多情况下,Ordinal或InvariantCulture比较更合适。这就是Resharper推荐的。当你寻找'/'时,Ordinal就足够了,它也恰好是最简单和最快的比较类型,所以这就是Resharper所推荐的。

对于您确实想要使用区分文化的比较的情况,只需指定StringComparison.CurrentCulture,Resharper将假设您知道自己在做什么。我知道你没有问过这最后一部分。只需添加它就可以完成。