一:泛型

关于泛型我自己也不是很好的理解,但是具体的运用还是可以的,可以这样的理解,我们定义一个数组,但是不知道将来它是保存什么类型的值,很是矛盾,这个时候泛型就出现了,它可以解决这个场景,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. Python黑客编程基础3网络数据监听和过滤

    网络数据监听和过滤 课程的实验环境如下: •      操作系统:kali Linux 2.0 •      编程工具:Wing IDE •      Python版本:2.7.9 •      涉及 ...

  2. Sizeof的计算看内存分配

    本文记录了有关sizeof的一些计算,主要有下面的四种情况:(如有错误,敬请留言) 使用sizeof()计算普通变量所占用的内存空间 sizeof计算类对象所占用空间的大小-用到了字节对齐 sixeo ...

  3. Canvas 内部元素添加事件处理

    目录 前言 自定义事件 有序数组 元素父类 事件判断 其他 立即执行函数 apply, call, bind addEventListener 传参 调用父类的构造函数 对象检测 isPointInP ...

  4. EF架构~对AutoMapper实体映射的扩展

    回到目录 AutoMapper在之前我曾经介绍过,今天主要是把它作一下扩展,因为它的调用太麻烦了,呵呵,扩展之后,用着还可以,感觉.net3.5之后,有了扩展方法这个东西,在程序开发速度及表现力上都有 ...

  5. [常见问题]解决创建servlet 找不到webservlet包.

    今天在创建一个springmvc项目的时候发现 使用的HttpServletRequest不起作用, 提示需要映入 jar文件, 于是便有了今天的这个问题: 百度了下才发现 项目需要导入Runtime ...

  6. redis常用操作总结

    在项目中时常会用到redis,redis看起来好像很难的样子,而且我也确认反复学习了很久,但是,总结下来,自己使用到的东西并不太多,如下作一些总结工作. 1.安装(单机) 1.1 windows, 直 ...

  7. mybatis插入的同时获取主键id

    <insert id="insertAndReturnId" parameterType="com.qianlong.cms.entity.AppCmsRole&q ...

  8. Linux常用命令01

    Linux对于我们来说,就是跑程序的运行平台,简单的来说,就是服务器,自己也没怎么系统的学习Linux的命令,随着项目的需要, 比如要查找日志,哪里出问题了,哪里报错了,因此自己也慢慢地懂一些常用的L ...

  9. SDWebImage清除图片缓存

    背景: 使用 SDWebImage 库,由于内存中一直缓存着加载的图片,而导致内存过高(我们无法手动管理内存),弹出内存警告而导致程序很卡或者直接crash掉. 我的解决方法: 在AppDelegat ...

  10. Reporting Service 没有权限登陆

    在配置好Reporting Service之后,登陆Report Mananger( http://localhost/Reports/Pages/Folder.aspx)出现一个异常,本地用户没有权 ...