.Net常用类库

一、String成员方法(常用)
  1,bool Contains(string str) 判断字符串对象是否包含给定的内容

  2,bool StartsWith(String str):判断字符串对象是否以给定的字符串开始。

  3,bool EndsWith(String str):判断字符串对象是否以给定的字符串结束。

    案例:判断是否是网址:以http://开头、以.com或者.cn结尾。

    案例:判断用户输入的邮件是否是QQ邮箱,用户输入的用户名是否包含“毛ze东”等敏感词

  4,int Length 获取字符串的长度属性

    str.Length

  5,char ch = str[3];

  6,int indexOf(int ch)   //返回指定字符在此字符串中第一次出现的索引

  7,int indexOf(string str)   //返回指定字符串在此字符串中第一次出现的索引

  8,LastIndexOf    //最后一次出现的位置

  9,String Substring(int start)   // 截取字符串,返回从指定位置开始截取后的字符串

  10,String substring(int start,int length)   // 截取字符串,返回从指定位置开始截取指定长度length的字符串

  11,String ToLower()   //把字符串变成小写;

  12,String ToUpper()  // 把字符串变成大写

  13,String Replace(char oldChar,char newChar)   //用新的字符去替换指定的旧的字符;

  14,String Replace(string lodStr,string newStr)  // 用新的字符串去替换指定的旧的字符串

  15,String trim()  // 去除字符串两端的空格,

  16,Trim(params char[] trimChars)  // 去掉两端的给定的字符

  17,TrimEnd和TrimStrat   //去掉开头的和结尾的空格

  18,String是不可变的,因此上面的操作都是生成新的字符串对象,要用返回值去接收新的字符串。

  19,String[] Split()   //重载方法很多,字符串按照分隔符切割。

  案例:把字符串用“,”分割

二、String静态方法

  1,bool IsNullOrEmpty(string value)   // 判断字符串是否为null或者是空字符串

  2,bool Euqals(string a,string b,StringComparison.OrdinallgnoreCase)   //对两个字符串进行不区分大小写比较

  3,string Join(string separator,params string[] value)  // 把一个数组(集合)用分隔符separator连接为一个字符串

三、StringBuilder

  因为字符串的不可变,在字符串进行连接的时候会产生新的字符串对象,造成浪费  

  1,Append();
    StringBuilder sb = new StringBuilder();
    sb.Append(s1);
    sb.Append(s2).Append(s3);//因为Append方法把this对象(当前对象)返回了,所以可以链式编程

    最后使用String s = sb.ToString(),一次性生成拼接结果字符串即可

  2,AppendLine();

    将默认的行终止符追加到当前 System.Text.StringBuilder 对象的末尾。(追加完,回车)

四、可空的int

  int是值类型,不能为null。在C#中可以用int?表示“可空的int”

  注意类型的转换:

    int? i = 5;
    if(i!=null)
    {
      int i1 = (int)i;//需要进行强转
    }
  也可以通过i.HasValue,判断是都为null、i.value获取i的值

  通过IL可知,int?其实被编译器翻译为Nullable<int>类型

五、日期类型

  DateTime类表示时间数据类型。属于结构体,因此是值类型

  DateTime.Now  当前时间,

  DateTime.Today  当前日期

  可以通过Year、Month、Hour的属性得到日期的年、月、小时等部分;
  也可以用构造函数根据给定的时间创建一个对象

六、异常的概念
  异常发生在程序发生的不正常情况下。异常以一个异常类对象的形式抛出,异常类描述异常信息、发生的位置等。

  异常的根类为Exception。异常类一般都继承自Excrption

七、异常的捕捉

  try
  {
    String s = null;
    s.ToString();
  }
  catch(NullReferenceException ex)
  {
    Console.WriteLine("为空"+ex.Message);
  }

  ex就是发生异常的异常类对象,变量名只要不冲突就任意

  在异常处理中,一旦try里面有问题了。放弃try代码块中之后的代码,直接跳到catch里面执行。

  如果try代码后还有代码,则处理完catch后还会继续执行

八、多个异常的处理
  try
  {
    int a = 10;
    int b = 0;
    Console.WriteLine(a/b);
    int[] arr = {1,2,3};
    Console.WriteLine(arr[3]);
  }
  catch(DivideByZeroException ae)
  {
    Console.WriteLine("除数不能为0");
  }
  catch(IndexOutOfRangeException ae)
  {
    Console.WriteLine("数组越界异常");
  }

  可以catch住父类异常,这样就可以抓住所有子类异常了,但是强烈不建议这样做,不要没理由的catch异常

九、不要吃异常
  catch(Exception ex)
  {
    //空代码
  }

  不要只是把异常catch住什么都不做或者只是打印一下,这不是正常的“异常处理”

  不知道怎么处理就不要catch,出错比“把错误藏起来”好。这样以为“不会出错了”,其实是把异常“吃掉了”,会让程序陷入混乱状态

  要合理的处理异常

十、finally

  try
  {
    //有可能有问题的代码
  }
  catch(异常类型 异常变量)
  {
    //处理方式
  }
  finally
  {
    //无论是否出现异常,都要执行的代码
  }

  finally中一般进行资源的回收等。

十一、File文件类

  File是静态类(无法被New),其主要的静态方法有:

  1,void Delete(string path)   删除文件

  2,bool Exists(string path)    判断文件是否存在

  3,string[] ReadAllLines(string path)   将文本文件中的内容读取到string数组中

  4,string ReadAllText(string path)    将文本文件读取为一个字符串

  5,void WriteAllLines(string path,string[] contents)   将string[]写入到文件中

  6,void WriteAllText(string path,string contents)   将字符串contents写入到文件path中

  7,AppendAllText   向文件中附加内容

  8,Copy  复制文件

  9,Move  移动文件

十二、Directory文件夹类,为static类

  1,CreateDirectory(string path) 创建文件夹全路径

  2,void Delete(string path,bool recursive) 
    删除文件夹path,recursive表示是否也删除子文件及子文件夹。
    如果文件夹不为空,recursive=false,则抛异常

    示例代码:Directory.Delete(@"全路径", true);

  3,boolExists(string path)   判断文件夹是否存在

  4,Directory.EnumerateFiles();  返回指定路径中的文件名的可枚举集合。

  5, Directory.EnumerateDirectories();  返回指定路径中与搜索模式匹配的目录名称的可枚举集合。

十三、流 Stream

  1,File类提供了读写文本文件的方法,但是对于大文件不能用它提供的方法,太占内存,需要一种“流式处理”的方法

  2,.Net将IO操作(文件、网络等)简化成流模型Stream,是抽象类,

    网络、文件、加密稍等都是不同的子类,

    最常用的子类是FileStream、MemoryStream等

  3,使用Stream的时候虽然可以:
    FileStream fs = new FileStream();
    但是,Stream fs = new FileStream();更好!

    在使用的变量类型提供的操作能满足的前提下,尽可能的用父类、接口声明变量,(体现了多态的思想),

  4,FileStream写入文件

    FileStream fs = new FileStream(@"D:\1.txt", FileMode.Create);//创建一个文本文件
    byte[] bytes = Encoding.Default.GetBytes("你好如鹏网");//将“你好如鹏网”进行编码成byte数组对象
    fs.Write(bytes, 0, bytes.Length);//操作fs对象进行写入
    fs.Close();//关闭流

    Stream写入的单位是byte(字节),char转换为byte时候,一个英文char转换为一个byte(对应的ASCII码),一个中文char转换为两个byte

    采用Default、UTF8、UTF32得到的字符串的byte[]长度不一样,因此说明不同类型编码在计算机中存储的不一样。

    用什么编码写入就用什么编码读取,否则会有乱码的问题。

    注意:不要往C盘写,因为Win7、Win8默认普通程序没有权限读写C盘

  5,FileStream读取

    1,byte[] bytes = new byte[4];
      每次读取多个字节数据,不能一次把一个文件读取出来,否则太占用内存,因为数组是占用内存的。
      这个叫做“缓冲区”,设的太小CPU和硬盘会很忙,设的太大内存会很“撑”

    2,while((len = fs.Read(bytes,0,bytes.Length))>0) 继续从流中读取最多bytes长度那么多字节的数据拷贝到bytes数组中。
      下次read是从上次最后一个read最后的位置之后开始读,一次次的读取read方法返回这次一共读了多少字节(比如遇到最后一次读取可能读不满),
      一旦返回的=0了,就说明读完了。
      对于没被赋值初始值就是0,因为没被填满的数组位置是0.

    3,String s = Encoding.Default.GetString(bytes,0,len); 把byte[]转换成对应string,考虑bytes没有充分利用的情况

    4,字节流不适合读取内容中包含文本文档,容易造成数据错乱(byte[]中含有一半的汉字)。

      要用后面讲的StreamReader

十四、资源的关闭

  1,在上面的程序有缺陷,如果write的时候发生异常,fs就不会close,其他程序就无法写入这个文件了,也会占用资源

  2,资源要使用完毕才能close,一旦close之后再操作就会出错

  3,正确是做法是放在using(){}里面

十五、using

  1,可以同时声明多个资源

    using(MyFile f1 = new MyFile())
    using(MyFile f2 = new MyFile())
    {

    }

  2,using其实就是编译器简化的try。。finally操作,

  3,using只是try。。finally,如果需要catch,只管catch就是了

  4,注意:实现了IDisposable接口的对象用完了,都要Dispose

十六、复制文件

  1,使用两个FileStream配合完成文件拷贝:
    从源文件的FileStream中读取一部分内容,再写入到目标文件的FileStream中。

    解释代码:
    1,while((len = inStream.Read(bytes,0,bytes.Length))>0)
      把读取并且返回读取的长度给len,然后判断len的值,综合为了一句话。

    2,outStream.Write(bytes,0,len);
      每次write都会从上次write的最后位置接着写入。将byte[] 数组b写入outStream中,off代码距离当前写入位置的偏移量,一般写0,len代表写入多长。
      缓冲区先设置50,,修改为1M,体会速度的变化。使用StopWatch类进行代码计时。

  2,封装一个Copy方法
    封装一个函数void copy(Stream inStream,Stream outStream,int bufferSize)用来把inStream拷贝到outStream中,
    缓冲区大小为bufferSize。要检查参数合法性(是否为null、bufferSize是否在合理范围)

  3,.Net 4.0之后Stream类中提供了一个CopyTo方法

  4,Reader、Writer(文本内容)

    直接用Stream进行文本文件的读写会比较麻烦,因为需要考虑文件的编码、中文字符等的问题

    StreamReader、StreamWriter是用来读写字符流(characterstream)的类,会帮着自动处理麻烦的问题

十七、编码

  1,由于历史原因,汉字等如何在计算机中以字节存储存在着多种标准,最常见的是GB2312(国家标准、表示汉字)、
    GBK(GB2312的扩展,还能表示繁体字等)、UTF-8(国际标准)、UTF-16等

  2,ANSI表示采用当前操作系统的默认编码,如果是中文Windows,默认就是GBK

  3,用什么编码保存就用什么编码读取,就不会乱码

  4,如何用其他编码保存?由StreamWriter构造函数决定:new StreamWriter(outStream, Encoding.UTF8
    怎么初步判断用了什么编码?记事本打开另存为,可以看到

  5,读取的编码由StreamReader构造函数决定

十八、泛型容器List<T>

  1,数组长度是固定的,List<T>可以动态增删内容。

    List<T>是泛型的,可以在声明的时候指定放什么类型的数据。

  2,如何增加

    List<int> list = new List<int>();

    list.Add(1);

    list.Add(2);

    list.AddRange(new int[]{1,2,3,4,5});

    list.AddRange(list2);//添加另外一个list

  3,如何遍历

    int[] nums = list.ToArray();//List泛型集合可以转换为数组

    List<string> listStr = new List<string>();

    string[] str = listStr.ToArray();

十九、泛型字典Dictionary<Key,Value>

  1,如何增加
    Dictionary<string,string> dict = new Dictionary<string,string>();
    dict.Add("zs","张三");
    dict.Add("ls","李四");
    dict.Add("ww","王五");

  2,如何修改
    dict["ls"] = "小赵";
    String s = dict["ww"];

  3,判断是否包含
    dict.ContainsKey();

二十、foreach

  1,除了使用for循环可以进行遍历外,实现了IEumerable接口的对象还可以使用foreach进行遍历

    string[] strs = {"asdasd","qweqweq","gdfg"};
    foreach(string s in strs)
    {
      Console.WriteLine(s);
    }

  2,List<T>、Dictionary<K,V>等一切实现了IEnumerable接口的对象都可以进行遍历

    Dictionary<string,object> dict = new Dictionary<string,object>();
    dict["rupeng"] = 888;
    dict["sina"] = "hehe";
    dict["baidu"] = true;
    foreach(KeyValuePair<string,object> kv in dict)
    {
      Console.WriteLine(kv.Key+"="+kv.Value);
    }

如鹏网学习笔记(四).Net常用类库的更多相关文章

  1. 如鹏网学习笔记(十五)ASP.NET MVC核心基础笔记

    一.ASP.Net MVC简介 1,什么是ASP.NET MVC? HttpHandler是ASP.net的底层机制,如果直接使用HttpHandler进行开发难度比较大.工作量大.因此提供了ASP. ...

  2. 如鹏网学习笔记(七)HTML基础

    HTML笔记 一.HTML简介 1,HTML (Hyper Text Mark-up Language) 超文本标记语言,是一种编程语言,也可以说是一种标准.规范. 2,HTML提供了一系列标记(标签 ...

  3. 如鹏网学习笔记(十四)ASP.NET

    Asp.net笔记 一.Socket类 进行网络编程的类,可以在两台计算机之间进行网络通讯 过程: 向服务器发送指令: GET /index.html HTTP/1.1 Host:127.0.0.1: ...

  4. 如鹏网学习笔记(九)JavaScript

    JavaScript笔记 一.JavaScript简介 1,JavaScript是一种计算机编程语言,可以像等其他编程语言那样定义变量,执行循环等. 2,JavaScript代码主要执行在浏览器上,为 ...

  5. 如鹏网学习笔记(十三)EasyUI

    一.EasyUI简介 是一组基于JQuery的UI插件集合 主要作用:为JQuery对象提供新的方法,实现新的功能 可以快速创建出简洁.友好.美观的页面,非常适合做网站后台管理页面(不够漂亮,不适合做 ...

  6. 如鹏网学习笔记(十)DOM

    DOM笔记一.DOM简介 Document Object Model 文档对象模型 DOM的节点树模型:整个文档按照从大到小的节点划分,每一个内容都算作一个节点 DOM API 编程接口 可以用来操作 ...

  7. 如鹏网学习笔记(五)MySql基础

    MySQL基础 一.数据库概念 1,网友装备信息.论坛帖子信息.QQ好友关系信息.学籍管理系统中的学生信息等都要“持久化”的保存到一个地方, 如果通过IO写到文件中,那么会非常麻烦,而且不利于多人共享 ...

  8. 如鹏网学习笔记(八)CSS

    CSS 一.CSS简介 1,CSS (Cascading Style Sheets) 级联样式表 ,是一种计算机语言,用来控制HTML内容的显示效果 2,CSS预先定义了众多的和显示效果有关的样式属性 ...

  9. 如鹏网学习笔记(十二)HTML5

    一.HTML5简介 HTML5是HTML语言第五次修改产生的新的HTML语言版本 改进主要包括: 增加新的HTML标签或者属性.新的CSS样式属性.新的JavaScript API等.同时删除了一些过 ...

随机推荐

  1. DataType 枚举

    命名空间:   System.ComponentModel.DataAnnotations 成员名称 说明   CreditCard 表示信用卡号码.   Currency 表示货币值.   Cust ...

  2. super函数的用法

    1.创建一个类. # .创建一个类 class Bird: def __init__(self): self.hungry =True def eat(self): if self.hungry: p ...

  3. day 64 Django 第五天 多表对多表的对应关系ORM

     一.查 设置 Author表  在 views文件中 # 作者表 class Author(models.Model): id =models.AutoField(primary_key=True) ...

  4. Day 43数据库(Day1)

    创建表. create table student( id int not null auto_increment PRIMARY key, name archar() not null, age i ...

  5. zoj4019 Schrödinger's Knapsack(dp)

    题意:有两种物品分别为n,m个,每种物品对应价值k1,k2.有一个容量为c的背包,每次将一个物品放入背包所获取的价值为k1/k2*放入物品后的剩余体积.求问所获取的最大价值. 整体来看,优先放入体积较 ...

  6. ansj分词史上最详细教程

    最近的项目需要使用到分词技术.本着不重复造轮子的原则,使用了ansj_seg来进行分词.本文结合博主使用经过,教大家用最快的速度上手使用ansj分词. 1.给ansj来个硬广 项目的github地址: ...

  7. 十分钟用 Node 命令行工具打造 react-cli 脚手架

    如果你有以下想法: 每次新开项目需要copy一堆文件/文件夹,太烦!想要快速建立工程 用了vue-cli.react-app,羡慕!想要自己做一个 你只需花十分钟时间,做一个Node命令行工具,打造属 ...

  8. Android之常用类库

    Android之常用类库 android.app :提供高层的程序模型.提供基本的运行环境android.content :包含各种的对设备上的数据进行访问和发布的类android.database ...

  9. shell while-ssh

    Linux shell脚本使用while循环执行ssh的注意事项 浏览:86次 出处信息 如果要使用ssh批量登录到其它系统上操作时,我们会采用循环的方式去处理,那么这里存在一个巨大坑,你必须要小心了 ...

  10. iOS 关于布局问题的一些认识

    ///更新约束和布局 更新约束布局相关的API - (void)updateConstraintsIfNeeded  调用此方法,如果有标记为需要重新布局的约束,则立即进行重新布局,内部会调用upda ...