.NET 2.0中的字符串比较

简介:

平时编写代码的时候,字符串可能是大家接触得比较多的,所使用的字符串操作也应该得比较多的.在字符串比较方面,DOTNET2.0新增了一个枚举StringComparison:


namespace  System
{
      
public enum StringComparison {
         CurrentCulture,
         CurrentCultureIgnoreCase,
         InvariantCulture,
         InvariantCultureIgnoreCase,
         Ordinal,
         OrdinalIgnoreCase
         }

}


可能大家平时在进行字符串比较的时候根本没有考虑那么多,
" = = " , " 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的时候默认的比较方式.例子如下:

 Thread.CurrentThread.CurrentCulture 
=   new  CultureInfo( " en-US " );  // 当前的区域信息是美国
             string  s1  =   " visualstudio " ;
            
string  s2  =   " windows " ;
            Console.WriteLine(String.Compare(s1, s2,StringComparison.CurrentCulture)); 
// 输出"-1"

            Thread.CurrentThread.CurrentCulture 
=   new  CultureInfo( " sv-SE " );  // 当前的区域信息是瑞典
            Console.WriteLine(String.Compare(s1, s2,StringComparison.CurrentCulture));  // 输出"1"StringComarison.CurrentCultureIgnoreCase指在当前区域信息下忽略大小写的比较.

3 .StringComarison.InvariantCulture        使用StringComarison.InvariantCulture来进行字符串比较,在任何系统中(不同的culture)比较都将得到相同的结果,他是使用CultureInfo.InvariantCulture的静态成员CompareInfo来进行比较操作的.例子如下:
            Thread.CurrentThread.CurrentCulture 
=   new  CultureInfo( " en-US " );  // 当前的区域信息是美国
             string  s1  =   " visualstudio " ;
            
string  s2  =   " windows " ;
            Console.WriteLine(String.Compare(s1, s2,StringComparison.InvariantCulture)); 
// 输出"-1"

            Thread.CurrentThread.CurrentCulture 
=   new  CultureInfo( " sv-SE " );  // 当前的区域信息是瑞典
            Console.WriteLine(String.Compare(s1, s2,StringComparison.InvariantCulture));  // 输出"-1"



本文转自高海东博客园博客,原文链接:http://www.cnblogs.com/ghd258/archive/2005/10/27/263011.html,如需转载请自行联系原作者
相关文章
|
2月前
|
开发框架 .NET C#
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
【10月更文挑战第9天】在 C#/.NET Core 中,有多种方法可以删除字符串的最后一个字符,包括使用 `Substring` 方法、`Remove` 方法、`ToCharArray` 与 `Array.Copy`、`StringBuilder`、正则表达式、循环遍历字符数组以及使用 LINQ 的 `SkipLast` 方法。
|
开发框架 .NET
.net 字符串逗号隔开去重
.net 字符串逗号隔开去重
57 0
.net 字符串逗号隔开去重
.NET指定图片地址下载并转换Base64字符串
.NET指定图片地址下载并转换Base64字符串
155 0
.NET 字符串 编码转换 GB2312 UTF8
将 gb2312 转换 utf8 编码 private void button1_Click(object sender, System.EventArgs e) {  byte[] temp;  //将 textBox1.
1621 0
|
JSON 前端开发 数据格式
.net MVC 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错,字符串的长度超过了为 maxJsonLength 属性设置的值
在.net mvc的controller中,方法返回JsonResult,一般我们这么写: [HttpPost] public JsonResult QueryFeature(string url, string whereClause) { string str=""; return Json(str); }   此时如果str过长,就会报“使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错,字符串的长度超过了为 maxJsonLength 属性设置的值”。
2953 0
|
JSON 数据格式
将JSON字符串反序列化为指定的.NET对象类型
将JSON字符串反序列化为指定的.NET对象类型
172 0
.NET中将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),并使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA
.NET中将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),并使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA
356 0
|
数据库
.NET的EF框架中:在应用程序配置文件中找不到名为“”的连接字符串问题
.NET的EF框架中:在应用程序配置文件中找不到名为“”的连接字符串问题
404 0
.NET的EF框架中:在应用程序配置文件中找不到名为“”的连接字符串问题
|
JSON 开发框架 算法
.Net 序列化枚举为字符串
我所做的项目是需要调用业务算法的,算法中有一个入参是油品的性质,这个性质有名称、编码、类型等属性,其中类型是固定质量性质、体积性质和其他性质这三种,所以我把其作为枚举类型。问题也由此产生,默认情况下,枚举是以其整数形式进行 JSON 序列化,这就需要同研发算法的同事约定好数值的含义。但是经过协商,算法同事要求我们传递成字符串。因此,我们希望它们在一些情况下以字符串的形式进行序列化。本文将讲解实现这一目标的各种方法。
|
C#
.NET6新东西--插值字符串优化
.NET6新东西--插值字符串优化
258 0