一:泛型

关于泛型我自己也不是很好的理解,但是具体的运用还是可以的,可以这样的理解,我们定义一个数组,但是不知道将来它是保存什么类型的值,很是矛盾,这个时候泛型就出现了,它可以解决这个场景,list<T> 以前这里是类型,前提是我们知道这里将来保存什么值,现在不知道了使用T(Type)来表示,将来什么类型的值都可以保存在里面。这个在集合,项目底层一些公共的接口,类之中使用的特别多。

二:集合

线型集合----List<T>

            List<int> array = new List<int>();
int[] str = { 0, 0, 0, 0, };
array.Add(1);
array.Add(2);
array.Add(5);
array.AddRange(str); //这里是添加一个数组到集合中。
array.Remove(5); //这里是添加的是一个固定的数字。
array.RemoveAt(1); //这里的item就是我们数组的下标。我们可以利用这个删除元素。
array[0] = 23; //修改第一个元素
foreach (var item in array) //这里是关于集合的循环输出。
{
Console.WriteLine(item.ToString());
}
Console.ReadKey();

离散集合

Dictionary<string,int> dic=new Dictionary<string,int>();

            Dictionary<string, string> dic = new Dictionary<string, string>();
//初始化
dic.Add("张辉", "1193451014");
dic.Add("ahui", "1193451014");
dic.Add("小辉", "1193451014");
dic.Add("王辉", "1193451014");
bool a=dic.ContainsKey("ahui"); //利用键来看是否在集合里面保存
Console.WriteLine(a);
//这个键值对集合---我们需要了解到如何循环的输出
foreach (KeyValuePair<string, string> item in dic) //输出的时候注意临时变量(item)的类型-----KeyValuePair<string, string>
{
Console.WriteLine(item.Key + "," + item.Value);
}
Console.ReadKey();

三:文件操作

文件是什么:是硬盘里面的一个内存,是一堆字节快。

1:命名空间

System.IO; //文件的命名空间

2:FileStream文件流,将文件以字节的方式进行读写。

上面的图片是关于文件的一些常用的方法和类。下面是一些练习。

--->FileStream文件流。

1:关于文件流的写。

我们看一FileStream有哪些方法。都是一些构造函数。

---->WriteByte()方法

            //FileStream-----利用文件流来写,第一个参数是文件名,第二个是枚举类型,我们选择重新写入。第三个是权限的选择。
FileStream fWrite=new FileStream("ahui.txt",FileMode.Create,FileAccess.Write);
fWrite.WriteByte(97); //写入了,但是我们要是没有调用display或者Flush就不会写入文件,只是写入缓冲期。
//Flush()-----清除此流的缓冲区,使得所有缓冲的数据都写入到文件中。
fWrite.Flush(); //这样才能写入文件中。
Console.WriteLine(fWrite);
Console.ReadKey();

上面的代码要是我们从客户端输入就会出现乱码,我们需要通过设置编码的格式来修改。

----->Write()

            Console.WriteLine("请输入?");
string sInput = Console.ReadLine();
//设置编码格式----有助于我们往文件中写入汉字
byte[] bs = Encoding.Default.GetBytes(sInput);
fWrite.Write(bs,0,5); //写入了,但是我们要是没有调用display或者Flush就不会写入文件,只是写入缓冲期。

---->ReadByte()

            //利用using来写,这个最后会自动的调用Display()方法 ,使我们写在缓冲区的内容写入到文件中。
using (FileStream fRead=new FileStream("ahui.txt",FileMode.Open,FileAccess.Read))
{
List<byte> list=new List<byte>(); //设置一个集合
int res = -1;
while ((res=fRead.ReadByte( ))!=-1) //利用循环来把文件中的值添加到集合中
{
list.Add((byte)res); //集合的Add()方法。
}
}
Console.ReadKey();

这里的49和50是我文件中保存的值。

---->Read

            using (FileStream fReader=new FileStream("ahui.txt",FileMode.Open,FileAccess.Read))
{
//使用数组来存储一个块字节
byte []bs=new byte[10]; //这个就相当于缓冲区一样
int count = fReader.Read(bs,0,bs.Length); //要求读取10个字节,从数组的第0位开始,全部存储完。
}

---->复制文件

            //思路---------------先读取文件,后写入文件。
Console.Write("请输入你要复制的路径#");
string str = Console.ReadLine();
if (!File.Exists(str)) //判断文件是否存在
{
Console.WriteLine("文件不存在,,,你搞我呀,");
Console.ReadKey();
return; //直接跳出.
}
//走到这里就表示文件存在
Console.Write(" 请输入要往哪里复制#");
string strM = Console.ReadLine();
using (FileStream fReader=new FileStream(str,FileMode.Open,FileAccess.Read)) //进行读的操作
{
using (FileStream rWrite=new FileStream(strM,FileMode.Create,FileAccess.Write)) //进行写操作
{
//第一种------利用ReadByte()和WriteByte()按照字节来进行处理
int res = -1;
while ((res=fReader.ReadByte())!=-1) //这里看是否读取到值,是否进行循环,没读取到res=-1,则不进行写入操作。
{
rWrite.WriteByte((byte)res); //参数只能是byte类型的,我们需要强制类型转换。
}
}
}
Console.WriteLine("OK");
Console.ReadKey();

上面的效率不是很高,我们可以利用Read()/Write()来进行,效率比之前的高很多。

                    //第二种------利用Read()和Write()按照字节来进行处理
//这里利用的是buffer,我们需要一个字节数组来处理。
byte [] buBytes=new byte[1024*1024*10]; //申请了一个10M大小的空间。
int count = 0;
while ((count = fReader.Read(buBytes, 0, buBytes.Length)) > 0) //把读取到的内容写入到了buffer中,我们只要文件中有值,count就会大于0。
{
rWrite.Write(buBytes, 0, count); //把buffer中的值写入到文件中。
}

四:Encoding处理字符集。

声明一个字符编码,

Encoding en = Encoding.GetEncoding("gb2312"); //声明一个gb2312的字符编码

得到计算机中的所有字符编码

            EncodingInfo[] ens = Encoding.GetEncodings();  //得到所有的编码 ,返回的是一个数组。+EncodingInfo是一个类,里面有一些关于编码的属性。
for (int i = 0; i <ens.Length ; i++)
{
Console.WriteLine("{0},{1},{2}",ens[i].CodePage,ens[i].DisplayName,ens[i].Name);
}
Console.ReadKey();

我们通过控制台可以看到PC中的所有的编码。

上面的代码中有注释,我们可以发现有些编码我们可以通过一个类来声明一个数组,这样就可以点 出来我们的所有的编码,其中有编码的编码数,编码名称,编码说明。

eg:将数字转换为16进制。

            for (int i = 0; i < 17; i++)
{
Console.WriteLine(i.ToString("x2")); //这里面的x表示的是编码的格式为16进制。 2表示保留2位数。
}
Console.ReadKey();

五:关于继承被初识化的调用问题

子类继承基类,当子类被初始化的时候,我们是先调用基类的构造函数,在调用子类的构造函数,这里有个叫做回溯的问题。是从里到外的。

    /// <summary>
/// 基类
/// </summary>
public class Parset
{
public Parset()
{
Console.WriteLine("基类被调用了。");
}
}
/// <summary>
/// 子类
/// </summary>
public class ChildA:Parset
{
private string name = "阿辉";
public ChildA()
{
Console.WriteLine("子类被调用了,,,");
} public void SayHello()
{
Console.WriteLine(name);
}
}
            ChildA ca=new ChildA();
ca.SayHello();
Console.ReadKey();

我们通过这里就可以发现这个规则。

30天C#基础巩固------集合,File(文件操作 ),Encoding处理字符集的更多相关文章

  1. python03-break、continue、for循环、数据bytes类型、字符串与字节的关系、变量指向与深浅拷贝、set集合、文件操作

    目录: 1.break.continue 2.for循环 3.数据bytes类型 4.字符串与字节的关系 5.变量指向与深浅拷贝 6.set集合 7.文件操作 一.break.continue bre ...

  2. File 文件操作类 大全

    File  文件操作类  大全 许多人都会对文件操作感到很难  我也是  但是一个好的项目中必定会涉及到文件操作的 文件的复制 粘贴  等等等 公司大佬写了 一个文件操作的工具类 感觉还是棒棒的啦   ...

  3. Android的file文件操作详解

    Android的file文件操作详解 android的文件操作要有权限: 判断SD卡是否插入 Environment.getExternalStorageState().equals( android ...

  4. [转]python file文件操作--内置对象open

    python file文件操作--内置对象open   说明: 1. 函数功能打开一个文件,返回一个文件读写对象,然后可以对文件进行相应读写操作. 2. file参数表示的需要打开文件的相对路径(当前 ...

  5. Python自动化 【第三篇】:Python基础-集合、文件操作、字符编码与转码、函数

    1.        集合 1.1      特性 集合是一个无序的,不重复的数据组合,主要作用如下: 去重,把一个列表变成集合实现自动去重. set可以看成数学意义上的无序和无重复元素的集合,因此,两 ...

  6. python学习笔记-(七)python基础--集合、文件操作&函数

    本节内容 1.集合操作 2.文件操作 3.字符编码与转码 4.函数操作 1.集合操作 集合是一个无序的.不重复的数据组合: 1.1 常用操作 它的作用是: 1)自动去重:列表变成集合,自动去重: &g ...

  7. Python 基础篇:字典、集合、文件操作

    字典 字典一种key - value 的数据类型 1. 语法: info = { 'stu1101': "TengLan Wu", 'stu1102': "LongZe ...

  8. Python 函数基础、有序集合、文件操作(三)

    一.set 特点: set是一个无序且不重复的元素集合访问速度快:天生解决元素重复问题 方法: 初始化 >>> s1 = set()>>> print(type(s ...

  9. python基础(四)文件操作和集合

    一.文件操作 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 1.文件基本操作: f = open('file.txt','r') # ...

随机推荐

  1. STC12C5A60S2笔记8(串口)

    1. 基本特性 1) 概念 1.1) 并行通信:数据的各位同时进行传输,传输速度快: 1.2)串行通信:通过一根或两根数据线传输数据,数据在信号线上依次传输:串行通信分为同步和异步两种: 1.2.1) ...

  2. dojo/io-query源码解析

    该模块主要对url中的query部分进行处理,我们发送GET请求时,将参数直接放在URL中,经常碰到的需求就是把一个对象转化为query字符串放到url中去发送GET请求.io-query模块便提供了 ...

  3. 记录maven java.lang.String cannot be cast to XX error

    在项目开发中自定义了一个maven plugin,在本地能够很好的工作,但是在ci server上却无法正常工作报错为: --------------------------------------- ...

  4. hadoop 学习笔记:mapreduce框架详解

    开始聊mapreduce,mapreduce是hadoop的计算框架,我学hadoop是从hive开始入手,再到hdfs,当我学习hdfs时候,就感觉到hdfs和mapreduce关系的紧密.这个可能 ...

  5. 整理BOM时写的关于拆分单元格的VB代码

    Public Function AddRows(pos As Integer, amount As Integer) Dim rpos As Integer rpos = pos + To amoun ...

  6. 我心中的核心组件(可插拔的AOP)~第二回 缓存拦截器

    回到目录 AOP面向切面的编程,也称面向方面的编程,我更青睐于前面的叫法,将一个大系统切成多个独立的部分,而这个独立的部分又可以方便的插拔在其它领域的系统之中,这种编程的方式我们叫它面向切面,而这些独 ...

  7. 说说设计模式~ 模版模式(Template)

    返回目录 模版模式,又被称为模版方法模式,它可以将工作流程进行封装,并且对外提供了个性化的控制,但主流程外界不能修改,也就是说,模版方法模式中,将工作的主体架构规定好,具体类可以根据自己的需要,各自去 ...

  8. Http Header里的Content-Type

    之前一直分不清楚post请求里Content-Type方式,如application/x-www-form-urlencoded.multipart/form-data.本文会介绍Content-Ty ...

  9. python学习 数据类型之序列

    一.序列(本文使用python3.5)############################################################# 列表.元组 字符窜都是序列#特点:#1 ...

  10. Linux下MakeFile初探

    make是linux下的编译命令,用于编译和生成Linux下的可执行文件.这个命令处理的对象是Makefile,makefile等.由于make的强大解析能力,makefile文件的编写也变得极为简单 ...