测试项目结构:
//ObjectExtension.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; namespace ConsoleApplication2.Extension { public static class ObjectExtension { /// <summary> /// 拓展方法:判断是否有值且不是空字符 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static bool IsNotNull(this string obj) { if (obj == null || obj == "") return false; if (obj.Trim() == "") return false; else return true; } /// <summary> /// Splits the CSV. /// </summary> /// <param name="line">The line.</param> /// <returns></returns> public static string[] SplitCsv(this string line) { Regex regex = new Regex("\".*?\""); var a = regex.Matches(line).Cast<Match>().Select(m => m.Value).ToList(); var b = regex.Replace(line, "%_%"); var c = b.Split(','); for (int i = 0, j = 0; i < c.Length && j < a.Count; i++) { if (c[i] == "%_%") { c[i] = a[j++]; } } return c; } } }
//Program.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using ConsoleApplication2.Extension; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { string s = "1,张三,\"这是张三的简历,他是一个很好的人,虽然说话不多\",\"这是张三的备注,他参加工件多年,经验丰富,解决了很多技术难题\""; Console.WriteLine(s.IsNotNull()); string[] splited = s.SplitCsv(); Console.WriteLine("Splited Length:"+splited.Length); foreach(var sp in splited) { Console.WriteLine(sp); } Console.ReadLine(); } } }
这是最普通的用法,每次使用扩展类时,都要手动添加引用的命名空间,不然vs不提示出来扩展方法,手动写出来不加命名空间也报错:
using ConsoleApplication2.Extension;
有时候,这种使用方法让人很烦躁,效率也不高
提高篇:
现在我们改一下 ObjectExtension.cs 的命名空间,直接改为 System
然后,在Program.cs 中就不需要引用额外的命名空间了。
原因是什么,就是我们使用的命名空间System,是.Net最基本的命名空间,每新建一个cs文件,都已经包含了这个命名空间了,所以不需要再引用了。
这也是一种投机取巧的方法,因为我们开发常用的一些扩展方法,如果每次放到新项目中,都要加新项目命名空间的前缀为类的命名空间,使用时也要引用 ,那效率真的不高。
这种方法也正好很方便的利用来提高开发效率,而且在不同的项目中不需要改类的命名空间,也不需要添加额外的引用,我觉得是很完美的方法。
最后附图运行结果:
时间: 2024-10-18 18:08:17