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

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

成都创新互联公司长期为成百上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为赤峰企业提供专业的成都做网站、成都网站制作,赤峰网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。

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

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

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

下面是调用代码:

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

别小看这一步改进,扩展后可减少我们编写代码的时间,提高我们编码的速度。如你对此怀疑,将第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);
  8. }

也很简单的,我们这里简单说一下效率问题,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 == null) return false;
  4.       else return Regex.IsMatch(s, pattern);
  5.   }
  6.   public static string Match(this string s, string pattern)
  7.   {
  8.       if (s == null) return "";
  9.       return Regex.Match(s, pattern).Value;
  10.   }
  11.   public static void Test3()
  12.   {
  13.       bool b = "12345".IsMatch(@"\d+");
  14.       string s = "ldp615".Match("[a-zA-Z]+");
  15.   }

使用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.  public static int ToInt(this string s)
  7.  {
  8.      return int.Parse(s);
  9.  }
  10.  public static void Test4()
  11.  {
  12.      string s = "615";
  13.      int i = 0;
  14.      if (s.IsInt()) i = s.ToInt();
  15.  }

同样方法可完成转换到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.   public static string ToPascal(this string s)
  7.   {
  8.       if (s.IsNullOrEmpty()) return s;
  9.       return s[0].ToString().ToUpper() + s.Substring(1);
  10.   }

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

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

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

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

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

本文名称:C#扩展方法:string常用扩展
网站网址:http://www.hantingmc.com/qtweb/news35/219385.html

成都网站建设公司_创新互联,为您提供企业建站微信公众号网站建设标签优化软件开发网站排名

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联