2016-12-01 56 views
0

在「共同做法和代碼改進」專欄,ReSharper的說,關於這條線:爲什麼Resharper建議在String.IndexOf中添加「StringComparison.Ordinal」?

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

String.IndexOf(串)是特定文化」,並鼓勵我把它改成這樣:

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

爲什麼?添加「StringComparison.Ordinal」爲我提高了這個代碼嗎?

+0

該機器人很可能只是從MSDN返回的東西,比如'使用StringComparison.Ordinal或StringComparison.OrdinalIgnoreCase進行比較,作爲文化無關字符串匹配的安全默認值。請參見[在.NET Framework中使用字符串的最佳做法](https://msdn.microsoft.com/en-us/library/dd465121(v = vs.110).aspx)...或者不接受機器人訂單 – Plutonix

+3

曾經說過的馬克吐溫嗎?那些不能記得過去被譴責重複它。*?請參閱[當字符串保證不會更改時,字符串比較是否真的不同](http://stackoverflow.com/q/10941375/1070452) – Plutonix

+0

不,這是Santayana。 –

回答

2

請看下面的例子:

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

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

天真,你會期望IndexOf返回10,因爲「SS」標誌只出現在字符串的最末尾。

但是在一些文化中,ß符號被看作是兩個ss的別名,因此沒有附加參數的IndexOf將在某些計算機上返回5,在其他計算機上返回10。

當使用參數StringComparison.Ordinal時,所有的文化差異將被忽略,並且它將在所有計算機上返回10個可預測的值。

相關問題