2016-12-01 7 views
0

В рубрике «Общие методы и Кодекс улучшений», Resharper говорит об этой линии:Почему Resharper рекомендует добавлять «StringComparison.Ordinal» в String.IndexOf?

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

Нет, это была Сантаяна. –

ответ

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, поэтому IndexOf без дополнительного параметра возвращает 5 на некоторых компьютерах и 10 на других компьютерах.

При использовании параметра StringComparison.Ordinal все культурные различия будут проигнорированы, и он будет на 10 ожидаемых прогнозов на всех компьютерах.