C#基础(1)
摘要:学习c#已经有一段历程了,回顾之前所打过的代码以及笔记,做些常用的总结,希望以后工作中如果用到,方便查找。当然,个人首要目的是这样,加深印象的同时,可以练习一下打字速度。希望也 坚持。当然,如果对其他人能带来一点点帮助的话,那更好啦。
本文涉及内容:
1、常用对字符串操作 2、集合 3、文件操作
1、常用对字符串操作:
a、字符串截取(Substring):
string str = "我爱*"; str = str.Substring(2, 4); //参数1:开始截取的索引(从0开始) 参数2:截取的长度
b、字符串以什么开头,以什么结尾:
str.StartsWith("我"); str.EndsWith("国"); //返回true 或者false
c、字符串分割:比较常用,对字符串进行分割,常用于操作把一个字符串分成一个字符串数组,根据字符串的特点,选取需要的部分。
string serverData = "ok:操作成功"; string[] data = serverData.Split(':'); // string[] data = serverData.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries); //这种方式可以在char数组中多添加需要截取掉的字符串 for (int i = 0; i < data.Length; i++) { Console.WriteLine(data[i]); } //结果为: ok 和 操作成功
d、比较两个字符串是否一致并忽略大小写(Equals:参数2可以选择多种比较方式,常用:比较两个object
string str1=abc; string str2 = abC; bool b = str1.Equals(str2, StringComparison.OrdinalIgnoreCase); //结果为:true
e、字符串数组插入操作:Join
string[] str = { "张三", "李四", "王五"}; string str2 = string.Join("|", str); //输出结果为:张三|李四|王五 插入到每个数组元素的中间
小结:字符串还有很多操作,使用频率比较高的就上面这些,当然,c#一些用方都可以点出来然后看文字说明去使用
2:集合
集合是一个很常用的东西 。常用的集合有:键值对集合,泛型集合
ArrayList(集合):可添加数据
Hashtable(键值对集合):键值可以为任何形式的数据类型
Dictionary键值对集合(常用):
Dictionary<int, string> dic = new Dictionary<int, string>(); //涉及到键必须为int类型,值必须为string类型 dic.Add(1, "张三"); //添加数据 dic.Remove(1); //传进来的是键标 dic.Clear(); //清空集合
List泛型集合(常用):
List <int> list= new List<int>(); //声明 list.Add(1); //添加数据 list.AddRange(new int[] { 3,4,5,6,7,8,9}); //添加集合 list.RemoveAt(2); //索引下标从0开始 list.RemoveRange(2, 4); //从索引2开始,移除4个元素 list.Clear();//清空集合
集合比较常用,用法也相对比较简单。常用的有很多,比如:Contains(是否包含) FirstOrDefault:第一个元素,.ToArray :转换为数组 等 可以list然后点出来,再根据说明
3、文件操作
摘要:文件操作是一些项目中必不可少的,对一些上传图片的路径操作,对写入的一些文档,日志文件进行保存之类
a:专门操作路径的path类 :(静态类)
using System.IO; string str = @"C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\es\C#.txt"; Path.GetFileName(str); //获取文件名 Path.GetFileNameWithoutExtension(str); //没有扩展名的文件名 Path.GetExtension(str); //获取文件扩展名 Path.GetFullPath(str); //获取文件绝对路径 Path.Combine(@"c:\a\b\c\", @"f\.avi"); //把两个路径融合 Path.GetDirectoryName(str); //获取路径名,没有文件名
涉及到路径就使用Path,有时候经常和File混合,可能是个人原因
b:File读写数据
(1):以字节形式读取:
byte[] bte = File.ReadAllBytes(@"C:\Users\xsh.cs\Desktop\new.txt"); string str = Encoding.Default.GetString(bte); //转换为字符串(最适用) 还有:UTF8Encoding.Default.GetString(bte)、Encoding.GetEncoding("GB2312").GetString(bte)
、ASCIIEncoding.Default.GetString(bte) 等多种编码格式
(2):逐行读取
string[] st = File.ReadAllLines(@"C:\Users\Administrator\Desktop\new.txt", Encoding.Default); //逐行读取内容 遍历数组 可对每一行进行操作
(3):以文本 形式读取
string str = File.ReadAllText(@"C:\Users\Administrator\Desktop\new.txt", Encoding.Default); //以文本形式读取 对于图片类,视频文件类 等其他类 不适用
(a):以字节形式写数据
byte[] by = Encoding.Default.GetBytes(str); File.WriteAllBytes(@"C:\Users\Path\new.txt",by);
(b):以数组的形式逐行写数据
File.WriteAllLines("new.txt",strArray); //strArray为定义的数组
(c):整体写入
File.WriteAllText("new.txt",str); //整体写入,最常用的方式 str为字符串
(d):追加
File.AppendAllText("new.txt",str); File.AppendAllLines("new.txt",str); //逐行追加
c:FileStream文件流
(1):读取文件:
using (FileStream fread= new FileStream(@"C:\Users\path.txt", FileMode.OpenOrCreate, FileAccess.Read)) { byte[] buffer = new byte[1024 * 1024 * 2]; int r = fread.Read(buffer, 0, buffer.Length); //返回当前读取的有效字节数 string str = Encoding.Default.GetString(buffer, 0, r); //解码 } //参数①: 针对哪一个文件 写文件路径 //参数②: 要对此文件进行怎样的操作 //参数③: 要对此文件的数据进行怎样的操作
(2):写文件:
using (FileStream fwrite = new FileStream(@"C:\Users\文件流.txt",FileMode.OpenOrCreate, FileAccess.Write)) { byte[] buffer = Encoding.Default.GetBytes(str); //str为字符串 fwrite.Write(buffer, 0, buffer.Length); }
(3):复制文件:
string path = @"C:\Users\video.avi"; string newpath = @"C:\Users\videoNew.avi"; //创建一个负责读取的文件流 using (FileStream fread = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read)) { //创建一个写入文件的文件流 using (FileStream fwrite = new FileStream(newpath, FileMode.OpenOrCreate, FileAccess.Write)) { byte[] buffer = new byte[1024 * 1024 * 5]; while (true) //文件过大,可能一次读写不完,需要循环 { int r = fread.Read(buffer, 0, buffer.Length); if (r == 0) //当读取不到字节时,说明已经完毕,则跳出循环 { break; } else fwrite.Write(buffer, 0, r); } } Console.WriteLine("复制成功!"); }
为什么使用using? 当一个类最终继承IDisposable 这个接口,就需要到释放资源空间,用using就可以自动释放资源空间,提高效率,减少代码量
d:StreamReader和StreamWriter
//读取 using (StreamReader sRead = new StreamReader(@"C:\Users\Path.txt", Encoding.Default)) { while (!sRead.EndOfStream) //指示当前流的位置是否为结尾 { Console.WriteLine(sRead.ReadLine()); } } //写入 using (StreamWriter stwr =new StreamWriter(@"C:\Users\Path.txt",true,Encoding.Default)) { stwr.Write(str); }
小结:两种方式都可以对文件进行读写操作,相对Stream用的比较多一点,用法很简单,根据write 或者read的方法,传入相应的参数即可。
总结:c#有很大一部分基础语法,最重要的会使用微软封装的一些类,一些方法。看这些类的方法的重载。如果有vs的那些语言包,都可以看每一个方法重载是做什么的,然后相应的使用。传入相应需要的参数,看返回值。