为什么Resharper建议在String.IndexOf中添加“StringComparison.Ordinal”?

时间:2016-12-01 21:28:12

标签: vb.net resharper string-comparison indexof

根据“通用实践和代码改进”标题,Resharper谈到了这一行:

If dt(0)("ThemeWidth").ToString.IndexOf("%") > "0" Then
    headerPanel.Width = Unit.Percentage(dt(0)("ThemeWidth").ToString.Replace("%", ""))

String.IndexOf(string)是特定于文化的”,并鼓励我将其更改为:

If dt(0)("ThemeWidth").ToString.IndexOf("%", StringComparison.Ordinal) > "0" Then
    headerPanel.Width = Unit.Percentage(dt(0)("ThemeWidth").ToString.Replace("%", ""))

为什么呢?添加“ StringComparison.Ordinal ”为我做了什么改进了这段代码?

1 个答案:

答案 0 :(得分:2)

考虑以下示例:

Dim longText As String = "01234ss789ß"
Dim shortText As String = "ß"

Dim index1 As Integer = longText.IndexOf(shortText)
Dim index2 As Integer = longText.IndexOf(shortText, StringComparison.Ordinal)

天真地,你会期望IndexOf返回10,因为“ß”符号只出现在字符串的最后。

但在某些文化中,ß符号被视为两个ss的别名,因此没有附加参数的IndexOf将在某些计算机上返回5,在其他计算机上返回10。

使用参数StringComparison.Ordinal时,所有文化差异都将被忽略,并且它将在所有计算机上以可预测的方式返回10。