转一篇关于c# string.Compare() 函数中那个comparisonType参数的文章

本文详细介绍了.NETFramework中的StringComparison枚举及其在字符串比较中的应用,包括Ordinal、OrdinalIgnoreCase、CurrentCulture、CurrentCultureIgnoreCase、InvariantCulture和InvariantCultureIgnoreCase等选项的特性与性能对比,帮助开发者更好地利用.NETFramework进行高效、准确的字符串比较。

原文链接 http://developer.51cto.com/art/201001/175935.htm


.NET Framework作为一个开发环境给编程人员带来了非常大的好处。平时编写代码的时候,.NET Framework字符串可能是大家接触得比较多的,所使用的字符串操作也应该得比较多的.在字符串比较方面,DOTNET2.0新增了一个枚举StringComparison:

  1. namespace System  
  2. {  
  3. public enum StringComparison {  
  4. CurrentCulture,  
  5. CurrentCultureIgnoreCase,  
  6. InvariantCulture,  
  7. InvariantCultureIgnoreCase,  
  8. Ordinal,  
  9. OrdinalIgnoreCase  
  10. }  

可能大家平时在进行.NET Framework字符串比较的时候根本没有考虑那么多,"= =","Eaqual()"用得不亦乐乎,其实这里面的东西也挺多,性能,区域信息等

1.首先是StringComparison.Ordinal 在进行调用String.Compare(string1,string2,StringComparison.Ordinal)的时候是进行非语言(non-linguistic)上的比较,API运行时将会对两个字符串进行byte级别的比较,因此这种比较是比较严格和准确的,并且在性能上也很好,一般通过StringComparison.Ordinal来进行比较比使用String.Compare(string1,string2)来比较要快10倍左右.(可以写一个简单的小程序验证,这个挺让我惊讶,因为平时使用String.Compare从来就没想过那么多).StringComparison.OrdinalIgnoreCase就是忽略大小写的比较,同样是byte级别的比较.性能稍弱于StringComparison.Ordinal.

2.StringComparison.CurrentCulture 是在当前的区域信息下进行比较,这是String.Compare在没有指定StringComparison的时候默认的比较方式.例子如下:

 
  1. Thread.CurrentThread.CurrentCulture = 
    new CultureInfo("en-US");   
  2. //当前的区域信息是美国  
  3. string s1 = "visualstudio";  
  4. string s2 = "windows";  
  5. Console.WriteLine(String.Compare(s1, 
    s2,StringComparison.CurrentCulture));   
  6. //输出"-1"  
  7. Thread.CurrentThread.CurrentCulture = 
    new CultureInfo("sv-SE");   
  8. //当前的区域信息是瑞典  
  9. Console.WriteLine(String.Compare(s1, 
    s2,StringComparison.CurrentCulture));   
  10. //输出"1"StringComarison.Current
    CultureIgnoreCase指在当前区域信息下
    忽略大小写的比较. 

3.StringComarison.InvariantCulture 使用StringComarison.InvariantCulture来进行.NET Framework字符串比较,在任何系统中(不同的culture)比较都将得到相同的结果,他是使用CultureInfo.InvariantCulture的静态成员CompareInfo来进行比较操作的.例子如下:

 
  1. Thread.CurrentThread.CurrentCulture = 
    new CultureInfo("en-US");   
  2. //当前的区域信息是美国  
  3. string s1 = "visualstudio";  
  4. string s2 = "windows";  
  5. Console.WriteLine(String.Compare(s1, 
    s2,StringComparison.InvariantCulture));   
  6. //输出"-1"  
  7. Thread.CurrentThread.CurrentCulture = 
    new CultureInfo("sv-SE");   
  8. //当前的区域信息是瑞典  
  9. Console.WriteLine(String.Compare(s1, 
    s2,StringComparison.InvariantCulture));   
  10. //输出"-1" 

.NET Framework字符串的比较相关操作方法就为大家介绍到这里。


<think>好的,我需要帮助用户在C#中比较两个字符串是否相等,同时忽略大小写。让我先理清用户的问题,然后根据提供的引用内容来组织答案。 首先,用户的问题很明确:如何在C#中比较两个字符串是否相等,忽略大小写。根据我的知识库,C#中有几种方法可以实现这一点,但需要确保引用的资料正确。 查看用户提供的引用,引用[1]提到使用Equals方法,特别是带有StringComparison参数的版本。例如,public bool Equals(string value, StringComparison comparisonType)。这里可以推荐使用StringComparison.OrdinalIgnoreCase来忽略大小写。 引用[3]详细解释了不同的比较方式,尤其是OrdinalIgnoreCase和StringComparison.OrdinalIgnoreCase的使用场景。这支持了使用Equals方法时传入正确的参数,如StringComparison.OrdinalIgnoreCase,来实现不区分大小写的比较。 另外,可能还有其他方法,比如使用ToUpper()或ToLower()将字符串换为相同的大小写后再比较,但这种方法可能存在文化区域设置的问题,不如直接使用StringComparison参数可靠。但用户提供的引用中没有提到这一点,所以可能不需要深入讨论,除非必要。 接下来,我需要确认是否有其他方法。例如,string.Compare方法是否适用。根据知识库,string.Compare也有一个重载接受StringComparison参数,可以用于忽略大小写的比较,如string.Compare(str1, str2, StringComparison.OrdinalIgnoreCase) == 0。虽然引用中没有直接提到,但结合常规知识,这也是可行的方法,但需要确认是否正确。 根据引用[3],OrdinalIgnoreCase适用于比较文件名、路径名等,且不依赖区域设置,所以推荐使用这种方式。因此,在回答中应该优先推荐使用Equals方法和string.Compare方法,并正确使用StringComparison参数。 现在需要组织回答的结构,确保符合用户的要求:结构清晰,分步骤解决问题,引用正确的内容。同时生成相关问题。 可能的步骤如下: 1. 使用Equals方法,传入StringComparison.OrdinalIgnoreCase。 2. 使用string.Compare方法,同样传入参数。 3. 可能提到ToUpper/Lower方法,但指出潜在问题,并推荐优先使用前两种方法。 然后根据引用[1]和[3]来支持这些方法,确保引用的正确性。例如,引用[1]提到使用Equals方法,而引用[3]解释了OrdinalIgnoreCase的作用。 在生成相关问题时,可以考虑其他比较方式、性能比较、应用场景等。 最后检查是否符合格式要求:中文回答,行内公式正确(虽然这个问题不涉及数学公式),引用标识正确添加,代码块使用正确的语法高亮,相关问题部分生成三个问题。</think>在C#中比较两个字符串是否相等(忽略大小写)的常用方法如下: ### 方法1:使用`Equals`方法 通过`string.Equals`方法并指定`StringComparison.OrdinalIgnoreCase`参数: ```csharp string str1 = "Hello"; string str2 = "hello"; bool isEqual = str1.Equals(str2, StringComparison.OrdinalIgnoreCase); // 返回true ``` 此方法直接比较字符串值,忽略大小写差异[^1][^3]。 ### 方法2:使用`string.Compare` 通过`string.Compare`方法并设置`ignoreCase`参数为`true`: ```csharp bool isEqual = string.Compare(str1, str2, StringComparison.OrdinalIgnoreCase) == 0; ``` 此方法返回0表示相等,适用于需要排序或更灵活比较的场景。 ### 方法3:换为统一大小写(不推荐) 虽然可以通过换为全大写或全小写比较,但需注意区域性设置的影响: ```csharp bool isEqual = str1.ToUpper() == str2.ToUpper(); // 可能受文化区域影响 ``` 推荐优先使用前两种方法,以避免区域性差异导致的意外结果。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值