一:泛型

关于泛型我自己也不是很好的理解,但是具体的运用还是可以的,可以这样的理解,我们定义一个数组,但是不知道将来它是保存什么类型的值,很是矛盾,这个时候泛型就出现了,它可以解决这个场景,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. UWP开发笔记——嵌套式页面的实现

    绪论 UWP开发中,Page是最常用的Control之一,通常情况下,在开发的application中,每一个页面就是一个Page.有时候,为了开发整合度更高,UI表现更为一致的UI,开发者需要把UI ...

  2. SSTable 介绍(二)

    作者:Jack47 上一篇SSTable 介绍(一)介绍了SSTable的适用场景和leveldb中SSTable的设计.本篇介绍SSTable文件的结构组成. SSTable的特点 首先明确一下上文 ...

  3. js中各种跨域问题实战小结(一)

    什么是跨域?为什么要实现跨域呢? 这是因为JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.也就是说只能访问同一个域中的资源.我觉得这就有必要了解下javascript中的同源策略 ...

  4. 自定义样式的select下拉框深入探索

    第一个版本: 首先实现自定义select下拉框应该具有的功能,我是选择将原来的select隐藏掉,自己在jquery代码中动态写进去<dl><dd><dt>这样的结 ...

  5. [FPGA] 2、新建并运行一个工程

    上一篇将开发板的情况大致介绍了一下,这次将一步一步展示如何新建.调试并下载运行一个点亮LED的工程. 1)打开Quartus新建工程: 2)填写规则大致如下: 3)选择我们芯片的类型: 4)点击fil ...

  6. [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之纹理Textures

    [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之纹理Textures 本篇分享一下第6个已完工的视频,即<beginner Graphics ...

  7. JavaScript 数组详解

    在程序语言中数组的重要性不言而喻,JavaScript中数组也是最常使用的对象之一,数组是值的有序集合,由于弱类型的原因,JavaScript中数组十分灵活.强大,不像是Java等强类型高级语言数组只 ...

  8. Vue.js线程机制问题还是数据双向绑定有延迟的问题

    最近用select2做一个下拉多选,若只是从后端获取一个列表渲染还好说,没有任何问题.但要用select2对数据初始化时进行selected的默认选项进行显示,就出现问题了. vm.$set('are ...

  9. OpenJDK将对Android开发产生怎样的影响?

    转载于:http://www.itxuexiwang.com/a/liunxjishu/2016/0228/182.html?1456926201 Google已决定将从下一版本的Android开始采 ...

  10. paip.mysql 性能测试by mysqlslap

    paip.mysql 性能测试by mysqlslap   作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog. ...