M_ary  
本人热爱编程...更期待和谐的团队.. 有意者,请发送邮件与我.. wangkang198802@126.com

1)关于static方法的应用  

  1  若该方法中没有用到非static字段,和属性的方法,可定义为static方法。

2)关于扩展方法  

  1  就是类本没有此方法,就好像有一样。  

  2   首先将类变为static,然后在static方法中的参数加this,且this必须是要扩展的类的类型。      

  public  static bool IsEmail(this string s){return s.contains('@');}      

  //  if(s.IsEamil().ToHZ()) 要点就是让参数作为对象,去调用该方法得到返回值的类型。

3)关于Linq  

  1  c#中 var是一个类型的简写,是根据右边进行类型的确定,此后不能再修改,因为编译器会自动帮我们将var进行类型转换,于JS中的var类型不同。  

  2  匿名类型:var p =new{Age=9,Name="kk"};   声明匿名类型的两个属性;并且创建匿名类型的一个对象,然后为该对象的各个属性赋值。  

  3  所以var就是为匿名类型而生。 

  4  成员一致的匿名类型会重用。 

  5  Linq实现:过滤掉负数(where),把数组排序(order by),然后元素两边加[]输出。    

  var ij=item.Where(i=>i>0).OrderBy(i=>i).Select(i=>"["+i+"]");//这样扩展方法,var类型全部用上  

  ---或者            

  var ij = from i in item                    

      where i > 0     //过滤                    

      orderby i descending  //排序                    

      select "["+i+"]";   //输出,设置输出匿名类型也可以  select new { age=4}; 

  6 从字符串数组中将长度小于5的元素返回            

  var s = from item in str                    

      where item.Length < 5  //过滤                    

      select item; 

  7  Dictionary中年龄大于20的人的姓名用“,”分割打印出来            

  var s = from item in dic                    

      where item.Value > 20   //值过滤                    

      select item.Key;    //键选取          

   Console.WriteLine(string.Join(",",s));   //分隔
  8  年龄大于20的人依次输出到含有Name、Age属性的匿名类型的序列中;            

  var s = from item in dic                  

       where item.Value > 20                    

      select new { name=item.Key,age=item.Value};   //返回匿名类型;            

  foreach (var str in s)            

  {                

    Console.WriteLine(str.age);          

   }
  9  其中年龄大于20的人输出到含有Name、Age属性的预定义类型Person的序列中;            

  var s = from item in dic                    

      where item.Value > 20                    

      select new Person{ name=item.Key,age=item.Value};  //返回Person对象;            f

  oreach (Person p in s)            

  {                

    Console.WriteLine(p.age);            

  }
  10  取出数组中出现次数最多的三个数            

  var result = from item in values   //每一项                        

        group item by item into gro   //按项分组,没组就是gro                        

        orderby gro.Count() descending   //按照每组的数量进行排序                        

        select new { num = gro.Key, nums = gro.Count() };   //返回匿名类型对象,输出这个组的值和这个值出现的次数            

  foreach (var item in result.Take(3))            

  {                

    Console.WriteLine("数字{0}出现了{1}次",item.num,item.nums);            

  }
  11  Linq常用的扩展方法  

    1 Average();Sum();Concat(); Contains(); Distinct(); Except(); Intersect(); Single();  

    2  Linq只能用于泛型序列。IEnumerable<T>;  

    3  Single() ;可用它来限定序列中仅有一个数据。

  12  如何将非泛型转为泛型序列  

    1  dt.Rows.Cast<DataRow>();  

    2  object[] values={};    values.Cast<int>.Max();  

    3  values.OfType<string>();  是挑选符合类型的进行转换,不会报错;

4)关于正则表达式( 匹配和提取 和替换)  

  1 表示字符类型使用--- . [] [^]  

  2  表示分组使用--- () |   

  3  表示出现次数使用--- * + ?  {n}  {n,}  {n,m}   

  4  表示开始和结束--- ^ $  

  5  \d \s \w  

  6  IsMatch用来判断一个字符串是否匹配正则表达式;     Regex.IsMatch('str','regex'); 返回bool;  

  7 注意,若不想让符号表示元字符,那么需要转义;  例如就想表示点;那么用 @"\.”;或者"\\."  

  8  正则表达式的提取:Match mat=Regex.Match("str","^(.+)=(.+)$")  ; if(mat.success){  mat.Groups[1].Value;  }  

  9 贪婪模式(.+)。;非贪婪模式(.+?)。让它不再贪婪,匹配第一个就可以了;  

  10 Regex.Match() ;获得匹配的第一个  

    Regex.Matches();获得所有的匹配项        

    foreach( Match mat in matches){  match.Value; }  //获得指定表达式的值      

    { match.Groups[1].value}  //获得表达式中的组;  

  11  替换: Regex.Replace(str,"将什么reg","替换为什么");  

  12  对匹配的分组进行替换工作;  

    string s1=Regex.Replce(s,@"(\w+)=(\w+)","$2是$1")  ;先对分组的结果进行操作,再进行替换。

posted on 2011-06-30 11:38  M_ary  阅读(474)  评论(2)    收藏  举报