比较两个字符串,忽略C#中的大小写

Pat*_*ick 305 c# string comparison equals

可能重复:
不同的字符串比较方法有什么区别

以下哪两个更有效?(或者可能还有第三种选择更好吗?)

string val = "AStringValue";

if (val.Equals("astringvalue", StringComparison.InvariantCultureIgnoreCase))
Run Code Online (Sandbox Code Playgroud)

要么

if (val.ToLowerCase() == "astringvalue")
Run Code Online (Sandbox Code Playgroud)

Sve*_*ven 262

如果您正在寻找效率,请使用:

string.Equals(val, "astringvalue", StringComparison.OrdinalIgnoreCase)
Run Code Online (Sandbox Code Playgroud)

序数比较可以比文化感知比较快得多.

ToLowerCase 但是,如果你要对同一个字符串进行大量的比较,那么这个选项可能是更好的选择.

与任何性能优化一样:测量它,然后决定!

  • 当调用静态方法时,我总是使用类名为`String.Equals`的类名,大写'S',或者例如`Int32.Parse`而不是`int.Parse`.关于`OrdinalIgnoreCase`的好建议.谢谢. (12认同)
  • @FrederikGheysels更正但StringComparer.OrdinalIgnoreCase的文档声明"由OrdinalIgnoreCase属性返回的StringComparer**将字符串中的字符用于比较,就像它们使用不变文化的约定**转换为大写一样,然后执行简单的字节比较,与语言无关." (请参阅https://msdn.microsoft.com/en-us/library/system.stringcomparer.ordinalignorecase.aspx).如果您可以存储比较左侧的结果,则只需要在右侧完成工作. (4认同)

Fre*_*els 164

第一个是正确的,恕我直言的效率更高,因为第二个"解决方案"实例化了一个新的字符串实例.

  • 但除了效率之外,我看到第二种解决方案的使用范围更广,因为它有效,更短更容易打字,并且具有易于记忆,直接的格式."StringComparison.InvariantCultureIgnoreCase" ......真的吗? (11认同)

Mar*_*ell 32

.ToLowerCase版本不会更快-它涉及的额外字符串分配(以后必须收集),等等.

就个人而言,我会用

string.Equals(val, "astringvalue",  StringComparison.OrdinalIgnoreCase)
Run Code Online (Sandbox Code Playgroud)

这避免了文化敏感字符串的所有问题,但因此它避免了文化敏感字符串的所有问题.只有你知道在你的上下文中是否正常.

使用string.Equals静态方法避免了任何问题valnull.

  • 你能告诉我们为什么你使用StringComparison.OrdinalIgnoreCase而不是StringComparison.InvariantCultureIgnoreCase? (3认同)
  • @mqpasta - 当然,这取决于目的,但是 http://msdn.microsoft.com/en-us/library/system.stringcomparer.ordinalignorecase.aspx “这在比较以编程方式生成的字符串时或当比较不区分大小写的资源,例如路径和文件名。” - 另外,它有点快 (3认同)

Jam*_*xon 12

我对"效率"这类问题的一般答案几乎总是如此,其中任何版本的代码都是最易读的,效率最高.

话虽如此,我认为(val.ToLowerCase() == "astringvalue")大多数人一眼就能理解这一点.

我所指的效率在代码的执行中不是必需的,而是在所讨论的代码的维护和一般可读性方面.


spe*_*der 6

我敢说,最安全的是String.Equals用来减轻val的可能性null.


fox*_*oxy 5

前者最快。原来这val是不可变的,因此使用String.ToLowerCase()创建了一个新的字符串对象,而不仅仅是与字符串比较器的直接比较。如果您每秒执行多次此操作,则创建新的字符串对象可能会非常昂贵。