【问题标题】:Why does Resharper recommend adding "StringComparison.Ordinal" to String.IndexOf?为什么 Resharper 建议在 String.IndexOf 中添加“StringComparison.Ordinal”?
【发布时间】:2016-12-01 21:28:11
【问题描述】:

在“通用实践和代码改进”的标题下,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”对我有什么改进代码的作用?

【问题讨论】:

标签: vb.net resharper string-comparison indexof


【解决方案1】:

考虑以下示例:

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。

【讨论】:

    猜你喜欢
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    相关资源
    最近更新 更多