字符串比较等价物

tga*_*ews 2 .net c# string clr string-comparison

我相信这两行是等价的,但在遇到一个奇怪的问题后,我不再相信这是事实.

String mimeType = context.Request.ContentType;
(String.Compare("text/xml", mimeType, true) == 0))
Run Code Online (Sandbox Code Playgroud)

是相同的 :

context.Request.ContentType.ToLower().Equals("text/xml")
Run Code Online (Sandbox Code Playgroud)

它们在CLR中的实现有何不同?

mke*_*bbs 6

它们不等同,ToLower/ToUpper可能存在一些本地化问题.在没有区分大小写的情况下比较两个字符串的方法(考虑其中一个字符串可能为null,这就是我不喜欢str1.Equals方法的原因)是静态String.Equals方法:

bool areEqual = String.Equals(str1, str2, StringComparison.OrdinalIgnoreCase);
Run Code Online (Sandbox Code Playgroud)


SLa*_*aks 5

它们并不完全等同; 看到这里.

以下是进行不区分大小写的比较的正确方法:

bool areSame = str1.Equals(str2, StringComparison.OrdinalIgnoreCase);
Run Code Online (Sandbox Code Playgroud)

这种方式也会更有效,因为它不会为小写副本分配单独的字符串.

  • 这将适用于99.999%的案例,但有时可能会失败.请参阅"土耳其语 - 我的问题"http://msdn.microsoft.com/en-us/library/ms973919.aspx (2认同)