C#扩展方法:string常用扩展

开发 后端
c#扩展方法奇思妙用基础篇二:string 常用扩展

string是c#里面最最常用的类,和它的使用频度比起来,它的操作确少的可怜,实例方法只有三十个左右,静态方法只有十多个,远远满足不了我们日常的需求。

本文使用c#扩展方法来增加string的功能,举出几个例子,也算是抛砖引玉吧!

首先我们把string类最常用的静态方法IsNullOrEmpty扩展成“实例”方法:

  1. public static bool IsNullOrEmpty(this string s)  
  2. {  
  3.     return string.IsNullOrEmpty(s);  

下面是调用代码: 

  1. public static void Test1()  
  2. {  
  3.     string s = "";  
  4.     bool b1 = string.IsNullOrEmpty(s);  
  5.     bool b2 = s.IsNullOrEmpty();  

别小看这一步改进,扩展后可减少我们编写代码的时间,提高我们编码的速度。如你对此怀疑,将第4行和第5行的代码手工录入100次(不能复制粘贴)试试,就知道了!

如果你需要,也可以扩展出“IsNotNullOrEmpty”。

再来看下FormatWith扩展

  1. public static string FormatWith(this string format, params object[] args)  
  2. {  
  3.     return string.Format(format, args);  
  4. }  
  5. public static void Test2()  
  6. {  
  7.     string today = "今天是:{0:yyyy年MM月dd日 星期ddd}".FormatWith(DateTime.Today);  

也很简单的,我们这里简单说一下效率问题,string.Format函数有多个重载:

  1. public static string Format(string format, params object[] args);  
  2. public static string Format(string format, object arg0);  
  3. public static string Format(string format, object arg0, object arg1);  
  4. public static string Format(string format, object arg0, object arg1, object arg2);  
  5. public static string Format(IFormatProvider provider, string format, params object[] args); 

尽管第1行的Format功能强大到可以取代中间的三个,但它的效率不高。中间三个重载是出于性能的考虑。

如果你比较看重效率的性能,仅仅使用一个FormatWith扩展是不行的,可以参照Format的重载,多扩展上几个!

.Net中处理字符串***大的还是正则表达式,下面我们将其部分功能扩展至string上: 

  1. public static bool IsMatch(this string s, string pattern)  
  2.   {  
  3.       if (s == nullreturn false;  
  4.       else return Regex.IsMatch(s, pattern);  
  5.   }  
  6.  
  7.   public static string Match(this string s, string pattern)  
  8.   {  
  9.       if (s == nullreturn "";  
  10.       return Regex.Match(s, pattern).Value;  
  11.   }  
  12.  
  13.   public static void Test3()  
  14.   {  
  15.       bool b = "12345".IsMatch(@"\d+");  
  16.       string s = "ldp615".Match("[a-zA-Z]+");  
  17.   } 

使用Regex要引用命名空间“System.Text.RegularExpressions”。

扩展后,我们就可以直接使用c#扩展方法,而不必再引用这个命名空间了,也不用写出“Regex”了。

Regex的Replace方法也比较常用,也可以扩展到string上。

接下来是与int相关的操作: 

  1. public static bool IsInt(this string s)  
  2.  {  
  3.      int i;  
  4.      return int.TryParse(s, out i);  
  5.  }  
  6.  
  7.  public static int ToInt(this string s)  
  8.  {  
  9.      return int.Parse(s);  
  10.  }  
  11.  
  12.  public static void Test4()  
  13.  {  
  14.      string s = "615";  
  15.      int i = 0;  
  16.      if (s.IsInt()) i = s.ToInt();  
  17.  } 

同样方法可完成转换到DateTime。

如果你用过CodeSmith,对下面这种应用应该比较熟悉:  

  1. public static string ToCamel(this string s)  
  2.   {  
  3.       if (s.IsNullOrEmpty()) return s;  
  4.       return s[0].ToString().ToLower() + s.Substring(1);  
  5.   }  
  6.  
  7.   public static string ToPascal(this string s)  
  8.   {  
  9.       if (s.IsNullOrEmpty()) return s;  
  10.       return s[0].ToString().ToUpper() + s.Substring(1);  
  11.   } 

不用多解释,大家都能看明白的。

还可扩展出像sql中字符串处理的Left、Right,比较简单,很好实现的。

也可以实现英文名词的单重数形式转换,这个应用场景不大,实现相对麻烦。

c#扩展方法中对string的扩展远不只这些,根据你的实际需要,只要用起来方便,就可以扩展出来。

本文只是抛砖引玉,如果大家有实用比较好的对string的扩展,不要吝惜,写在回复中,和大家一起分享!

【编辑推荐】

  1. 看看C# Hook 如何实现
  2. 学习C#虚函数实例演示
  3. 一个C#数据访问XML的例子
  4. C#特性之通俗演义
  5. 探寻C# 3.5新特性
责任编辑:book05 来源: cnblogs
相关推荐

2009-08-10 17:36:17

C#扩展方法

2009-08-31 14:45:10

C#扩展方法

2009-09-01 11:04:59

C#调用扩展方法

2009-08-28 14:25:57

C# byte数组

2009-08-27 09:27:49

C#扩展方法

2009-08-26 15:53:48

C#扩展方法

2009-08-18 14:14:45

C#扩展方法性能测试

2009-08-27 16:24:48

扩展方法C# 3.0新特性

2009-09-03 13:50:22

ToString(st

2009-08-13 17:06:37

C#扩展方法Enumerable.

2009-09-01 11:19:47

C# 3.0扩展重载抉

2009-04-03 13:20:05

C#扩展方法调用

2009-09-02 17:08:30

C#语言开发Windo

2009-09-03 17:33:08

C#常规扩展性模型

2009-09-03 17:18:40

C#扩展性对象模型

2009-04-03 10:25:32

C#XML扩展代码

2009-09-09 13:31:15

C# TextBox

2009-08-17 17:56:32

C# 枚举

2012-10-31 17:37:48

2024-05-30 07:29:59

开源工具类库扩展
点赞
收藏

51CTO技术栈公众号