使用哪种字符串比较器来与switch语句一起使用?

6
当进行switch语句时,字符串是如何进行比较的?线程/计算机的当前文化是否影响switch的评估?我习惯于在比较字符串时始终指定比较器,因此确认这一点将是很好的。

我怀疑是StringComparer.Ordinal,但我找不到任何相关的文档。

请查看源代码:https://referencesource.microsoft.com/#System/compmod/system/diagnostics/Switch.cs,3e925a7e08f32940 - jdweng
1个回答

6

当前线程/计算机的文化是否影响switch评估?

不会。

switch在底层使用Equals。因此它是序数的:

此方法执行序数(区分大小写且与文化无关)比较。

我们如何知道switch使用Equals?好吧,文档说明了:

常量表达式的计算方式如下:

  • 如果expr和constant是整数类型,则C#等号运算符确定表达式是否返回true(即,expr == constant)。

  • 否则,通过调用静态Object.Equals(expr, constant)方法来确定表达式的值。

后面的要点适用于这里。


所以,它并不是字面上使用 StringComparer.Ordinal,但它执行的是同样的比较。 - David S.
1
是的,@DavidS,有效地。尽管https://referencesource.microsoft.com/#mscorlib/system/stringcomparer.cs,350显示`StringComparer.Ordinal`使用`String.Equals`(而不是反过来)。 - mjwills

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接