VR引擎(10.17)

123 阅读4分钟

using System; using System.IO; using System.Text;

namespace ConsoleApp1 { /public class MyMath//创建了一个泛型类,T的类型由我创建的对象的时候决定 { public T GetNum(T num1,T num2) { dynamic num3 = num1;//动态类型变量 我们可以将泛型的值赋给动态类型变量,就可以拿进行运算操作 dynamic num4 = num2; return num3+num4; } }/

一、

集合类 列表,集合,栈、线性表 列表 之前学的数组,存在什么问题能够动态改变长度吗?增删,长度溢出

internal class Program
{
    static void Main(string[] args)
    {
       /* MyMath<int>math=new MyMath<int>();//这时候T的类型为int类型
       *//* Console.WriteLine(math.GetNum(123));*//*
        MyMath<string>math2=new MyMath<string>();//这时候T的类型为int类型
        *//*Console.WriteLine(math2.GetNum("jiskfnh"));*//*
        Console.WriteLine(math.GetNum(233, 345));
       
        //定义一个泛型列表
        List<int> list = new List<int>(3) ;//元素长度count  列表容量capacity
        Console.WriteLine(list.Count);//如果没有值的话,元素个数是0,容量也是0
        Console.WriteLine(list.Capacity);
        list.Add(1);
        int[] intArray = { 1,2,3,4,56 };
        list.AddRange(intArray);*/
        /* list.Add(45);
         Console.WriteLine(list[2]);
         Console.WriteLine(list[list.Count-1]);//读取最后一个值
         list.Insert(0, 5);//在下标为0的位置插入一个5
         Console.WriteLine(list[0]);
         list.Remove(34);//填要删除的元素
         list.RemoveAt(1);//填要删除的元素的下标
         foreach(int i in list)
         {
             Console.WriteLine("元素{0}", i);
         }*/
        //

二、

集合类 字典 键和值

        /* Dictionary<string, string> dic = new Dictionary<string, string>();

         dic.Add("name", "麻辣王子");//前面表示键名,后面表示值
         Dictionary<string, string> dic2 = new Dictionary<string, string>();
         dic2.Add("name2", "小明");
         *//*dic.Concat(dic2).ToDictionary(x=>x.Key,y=y.Value);*//*
         foreach (string k in dic.Values)
         {
             Console.WriteLine("值为{0}",k);//遍历所有的值
         }
         foreach(string k in dic.Keys)
         {
             Console.WriteLine("键名为{0}",k);//遍历所有的键名
         }
         foreach (KeyValuePair<string,string> k in dic)//KeyValuePair表示键值对应的类型
         {
             Console.WriteLine("值为{0},键名为{1}", k.Value, k.Key);
         }
         Console.WriteLine(dic.ContainsKey("name1"));
         Console.WriteLine(dic.ContainsValue("麻辣王子"));*/

#三、 大文件读取方式

FileStream fsRead = new FileStream("./1.txt", FileMode.OpenOrCreate, FileAccess.Read);
        //创建一个数组
        byte[] fsByte = new byte[1024 * 1024 * 4];//规定读取的最大字节长度
        //开始读取文件,读取完返回的是实际读取的字节数
        int rNum = fsRead.Read(fsByte);
        //根据字节数,将读取到的字节转化成字符串
        string a = Encoding.UTF8.GetString(fsByte,0, rNum);
        Console.WriteLine(a);
        Console.WriteLine(rNum);
        fsRead.Close();//关闭文件流
        fsRead.Dispose();//释放所占资源

写入 替换 追加

using(FileStream fdWrite = new FileStream("./1.txt", FileMode.Append, FileAccess.Write))
        {
            string b = "123456";
            //将字符串转成字节
            byte[] fdByte = Encoding.UTF8.GetBytes(b);
            fdWrite.Write(fdByte);//将文件信息使用追加的形式写到文件中
        } 
        using(FileStream fdWrite = new FileStream("./1.txt", FileMode.Create, FileAccess.Write))
        {
            string b = "123456";
            //将字符串转成字节
            byte[] fdByte = Encoding.UTF8.GetBytes(b);
            fdWrite.Write(fdByte);//将文件信息使用替换的形式写到文件中
        }
        //读取的是字符串
        StreamReader fileRead = new StreamReader("./2.txt",Encoding.Default);
       /* string fileString = fileRead.ReadLine();//读取每一行信息
        string allText = fileRead.ReadToEnd();//读取所有信息
        char fileChar = (char)fileRead.Read();//读取一个字符
        Console.WriteLine(fileString);
        Console.WriteLine(allText);*/
       // Console.WriteLine((char)fileRead.Read());//逐个逐个读取,返回该字符对应的十进制数,没有返回-1

        fileRead.Close();//关闭文档流

        //Substring
        /* string Qstr5 = "12345";
         Qstr5 = Qstr5.Substring(0, 2);//从0开始,2为长度
         Console.WriteLine(Qstr5);*/


        //写入信息
        // StreamWriter fileWrite = new StreamWriter("./2.txt");
        /*fileWrite.WriteLine("第一行");//使用替换的形式写入一行后会默认加一个换行符
        fileWrite.Write("不换行");//使用替换的形式写入一行
        fileWrite.WriteLine("第二行");*///写入一行之后默认加一个换行符
                                     //做一个练习  输入一行的内容,逐行写入到2.txt中直到遇到q结束
        /*while(true)
        {
            string addStr = Console.ReadLine();
            //q找出来对应的值不为-1时跳出
            int Qindex = addStr.IndexOf("q");
            if (Qindex != -1)
            {//Substring
                addStr = addStr.Substring(0, Qindex);
                fileWrite.WriteLine(addStr);
                break;
            }
            else
            {
                fileWrite.WriteLine(addStr);
            }
        }*/
        //compareTo()对比两个字符串是否相等
        string comparaStr1 = "1234";
        string comparaStr2 = "12345";
        Console.WriteLine("对比结果{0}",comparaStr1.CompareTo(comparaStr2));//如果相等则为0,不相等则为1

        //字符串  引用类型

        //StringBuilder  申请了一个动态内存空间
        StringBuilder builderStr1 = new StringBuilder(4,5);//(最小容量,最大容量)
        StringBuilder builderStr2 = new StringBuilder("dfsdfgghgkj");
        builderStr1.Append("dfgg");//追加到最后
        builderStr1.Insert(0, "1");//在指定下标位置插入内容
        builderStr1.Remove(0,1);//从0开始删除,删除一个字符
        builderStr1[0] = '3';//更改字符
        Console.WriteLine(builderStr1);
        Console.WriteLine(builderStr1.Capacity);
       
    }
}

}

四、接口

namespace 接口

{ public class Animal { public void sleep() { Console.WriteLine("睡觉"); }

}
public interface Flyable
{
    int num { get; set; }//里面的get,set实质上没有函数体的函数
    void getNum();//默认都是公开的
    void fly();
    void skating();
}
public interface Eat
{
    void eat();
}
//一个接口继承多个接口
public interface SuperFace : Flyable, Eat { }
class Bird : Animal,Flyable,Eat//继承一个类、多个接口,类要写在最前面
{
    public int num1;
    int Flyable.num { get => num1; set { num1 = value; }}
   

    public void eat()
    {
        Console.WriteLine("吃");
    }

    public void fly()
    {
        Console.WriteLine("飞2");
    }

    public void getNum()
    {
        Console.WriteLine("滑行");
    }

    public void skating()
    {
        Console.WriteLine("滑行");
    }
}
internal class Program
{
    static void Main(string[] args)
    {
        Bird bird1=new Bird();
        bird1.fly();
    }
}

}

五、小文件

using System;

using System.IO;

using System.Text;

namespace 小文件操作

{
internal class Program
{
    static void Main(string[] args)
    {
        //C#本质是在学什么,各种类库的使用
        //File类,读写文件  整个文件信息一次性全部读取过来  一般读写小文件
        string str = File.ReadAllText("./1.txt",Encoding.UTF8);  //绝对路径  相对路径  拿到所有的文本信息
        Console.WriteLine(str);
        //读取所有行的信息
        string[] strArray = File.ReadAllLines("./1.txt");
        foreach(string i in strArray)
        {
            Console.WriteLine("第i行:{0}", i);//打印每行信息
        }
        //添加信息  两种  追加  整个替换(默认)
        File.WriteAllText("./1.txt", "替换内容");
        string[] str3 = { "1", "2", "3" };
        File.AppendAllLines("./1.txt",str3);//表示将数组中的字符串逐行追加的文件中
        File.AppendAllText("./1.txt", "\n追加内容");//在末尾添加内容

        Console.WriteLine();
    }
}

}

六、练习题

 //题目一
        /*int[] intArray = { 1, 3, 23, 34, 123, 12, 33 };
        List<int> list1 = new List<int>();
        List<int> list2 = new List<int>();
        foreach(int i in intArray)
        {
            if(i%2!=0)
            {
                list1.Add(i);
            }
            else
            {
                list2.Add(i);
            }
        }
        list1 = list1.Concat(list2).ToList();//合并list1和list2返回的一个新的列表
        foreach(int i in list1)
        {
            Console.WriteLine(i);
        }*/

        //题目二
        string str1 = "maddfdmdf";
        Dictionary<char,int> dic = new Dictionary<char, int>();
        foreach (char i in str1)
        {
            if(dic.ContainsKey(i))//判断字典dic中有没有对应的键名
            {
                dic[i]++;
            }
            else
            {
                dic.Add(i, 1);
            }
        }
        foreach(KeyValuePair<char,int> k in dic)
        {
            Console.WriteLine("字符{0}出现的次数为{1}", k.Key, k.Value);
        }