![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C#
Csharp语言
心前阳光
天助自助者
展开
-
C# 正则表达式
文档官方文档常用静态方法Regex.IsMatch(input, regular) 判断input是否匹配regularRegex.Match(input, regular) 返回符合regular的第一个MatchRegex.Matches(input, regular) 返回符合regular的多个Match实例string delimited = "[^a-x]";string input = "abcdefghijklmnopqrstuvwxyz";Debug.Log(Regex原创 2022-02-28 15:37:55 · 84 阅读 · 0 评论 -
匹配单个字符
单个字符 格式[set] 匹配 s、e、t[^set] 取反 不匹配s、e、t[a-d] 设置匹配范围 匹配a、b、c、d[^a-d] 匹配范围 取反 不匹配a、b、c、d.匹配 任意字符 不匹配 \n\char 匹配转义字符案例//1.[set] 匹配 s、e、tstring delimited = "[set]";string input = "tuesday";var matches = Regex.Matches(input, delimited);PrintMatc原创 2022-02-28 16:30:23 · 208 阅读 · 0 评论 -
异步编程 1
基础关键字 async await异步方法的返回值为Task< T >,没有返回值使用Task代替 void调用:await 异步方法(参数)获取返回值中的T:T(泛型传入的类型) 标识符=await 异步方法(参数)方法中出现await 异步方法 该方法必须使用async修饰案例using System;using System.IO;using System.Threading.Tasks;namespace TaskAysnc{ class Progra原创 2022-01-19 22:01:17 · 195 阅读 · 0 评论 -
Linq into查询延续子句
语法into 标识符作用接受查询的一部分结果并赋予一个名字该结果作为一个集合 可以继续进行查询案例student2NameID小黑1小宝2student3ClassID语文1数学1英语0联结后NameIDClass小黑1数学小黑1语文查询延续结果studentsIDClass语文1数学1var student2 = new[]{原创 2022-01-17 18:58:18 · 187 阅读 · 0 评论 -
Linq group子句
语法group 对象 by 对象的字段作用根据对象的某个字段进行分组,分组的字段作为键key该子句返回的是集合的集合。每一个分组是一个集合,多个分组组成一个新的集合。案例var student2 = new[]{ new {Name="小黑",Group=1}, new {Name="小宝",Group=3}, new {Name="小路",Group=1}, new {Name="小非",Group=2}};var result2 = from s i原创 2022-01-17 18:11:59 · 704 阅读 · 0 评论 -
Linq select 子句
语法select 表达式作用指定应该返回所选对象哪些部分:全部字段、一个字段、多个字段组合成的新对象。案例 var student = new[] { new {Name="1",Age=12 ,ID=1}, new {Name="2",Age=14 ,ID=2} }; var res3 = from s in student select s.Age;//一个字段 var res4 = from s in student sel原创 2022-01-17 17:50:37 · 277 阅读 · 0 评论 -
Linq orderby子句
语法orderby 表达式 ascending(升序)/descending(降序)作用根据表达式对集合数据进行排序,默认为升序表达式通常是集合元素的一个字段案例int[] numbers = { 2, 15, 5, 12 };var res2 = from num in numbers orderby num descending select num; foreach (var item in re原创 2022-01-17 17:30:42 · 227 阅读 · 0 评论 -
LinQ from、Let、Where子句
linq表达式由form子句和查询主体组成,查询主体可以有多个from…let…where子句from子句引入额外的数据集合;let子句进行运算、赋值;where子句设置筛选条件实例int[] numbers = { 2, 15, 5, 12 };int[] numbers2 = { 3, 15, 1, 12 };void Start(){ var result = from num in numbers//from 子句 from num2 in .原创 2022-01-10 22:18:34 · 527 阅读 · 0 评论 -
Linq 查询表达式的结构、from子句、join子句
查询表达式的结构结构要求:form子句和select…group子句必须有 其他子句可以没有语法from Type item in itemsType是集合中元素的类型,可有可无,编辑器会根据集合推断类型items是可枚举的集合(不是枚举类型)item是迭代变量的名字,迭代变量逐个表示集合中的元素例子 int[] nums = new[] { 1, 2, 3 }; IEnumerable<int> result = from int num in n原创 2022-01-07 22:11:37 · 1067 阅读 · 0 评论 -
Linq 方法语法、查询语法、查询变量
方法语法指明查询方法的调用顺序,直接调用方法。查询语法描述你想返回的东西,没有指明如何执行查询,和SQL语法类似。查询变量查询变量有两种形式形式1:可以枚举的一组数据 满足查询参数的项列表形式2:标量(单一值) 满足查询条件的结果的某种摘要形式注意若返回枚举(不是枚举类型 ) 它不包含查询结果编译器会创建能够执行这个查询的代码 查询没有执行 处理枚举时才执行若枚举处理多次 查询也会执行多次若返回标量 返回的是查询执行过的的值案例public class Linq : Mono原创 2021-12-30 22:49:08 · 217 阅读 · 0 评论 -
Linq 匿名类型
作用匿名类型常作为LINQ的查询结果语法new{字段=值}//字段不需要类型 编辑器根据值推断类型var student=new {Name=“LINQ”,Age=22};print(student.Name);new{其他已赋值的变量}int age=22;var student=new{age};print(student.age)new{成员访问表达式}public class Other{public string Name=“LINQ”;}var student=n原创 2021-12-30 22:17:03 · 479 阅读 · 0 评论 -
中文转拼音
github地址使用方法 NPinyin.Pinyin.GetPinyin(中文字符串); 返回拼音字符串原创 2021-12-22 11:24:20 · 106 阅读 · 0 评论 -
获取系统文件路径
引入命名空间 using SystemEnvironment.GeGetFolderPath 方法获取系统路径 参数为枚举类型例如:参数设置为 :Environment.SpecialFolder.MyDocuments;通过GeGetFolderPath方法可获取系统路径实例string path= Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);...原创 2021-10-30 21:41:10 · 162 阅读 · 0 评论 -
DateTime
自定义日期和时间格式字符串实例:public Text currentTime;void Start(){ currentTime.text = DateTime.Now.ToString("yyyy'-'MM'-'d HH':'mm");输出格式xxxx-xx-x xx:xx 例如 2021-9-3 10:51}格式说明符Yearyyyy 由四位数字表示的年份MonthM 1-12Dayd 1-31dd 01-31原创 2021-09-03 11:02:18 · 110 阅读 · 0 评论 -
预处理器指令
#define#undef原创 2021-07-02 09:22:09 · 103 阅读 · 0 评论 -
匿名 函数
概念没有方法名的函数语法委托类型的变量=delegate(参数列表){};作为方法的参数时候 可以不加分号作用简写函数缺点没有函数名 因此存储在委托变量中的时候无法准确去除原创 2021-06-28 21:22:46 · 76 阅读 · 0 评论 -
事 件
事件关键字:event声明语法:访问修饰符 event 委托类型 事件名作用防止外部随意置空委托防止外部随意调用委托事件相当于对委托进行一次封装 让委托更加安全注意事件不能在 类外部 赋值事件不能在 类外部 调用事件不能作为临时变量在函数中使用事件只能作为类、接口、结构体的成员只能使用+=添加事件中的函数-=去除事件中的函数解决方法:在类内部封装一个公有方法 调用事件例子class TestEvent{ public delegate void Testeven原创 2021-06-27 21:44:31 · 79 阅读 · 0 评论 -
系统自带的委托
使用系统自带委托需要引用using System;Action 无参数 无返回值Func 指定返回值类型的泛型委托Action action;Func<string> func;Action 16个带参数的委托 但都无返回值 参数1-16Func 16个带参数的委托 有返回值 参数1-16...原创 2021-06-26 14:46:57 · 75 阅读 · 0 评论 -
委 托
概念关键字:delegate委托实质是一个类,定义了函数的返回值和参数类型。委托是存储函数的容器,可以添加或者去除指定类型的函数,添加的函数方法必须和委托的格式一致。语法访问修饰符 默认公有的访问修饰符 delegate 返回值 委托名(参数列表)可以写在命名空间或者class中例子定义规则 符合该规则的方法可以存储在 该类型的委托变量中delegate void Fun(); //没有参数 没有返回值public void Test(){Console.WriteLine(“原创 2021-06-24 22:54:27 · 124 阅读 · 0 评论 -
提取正整数 的各个位数
思路1.整型数字 取余10 可以得到 个位数(最后一位) 12%10=22.整型数字 除以10 可以去除 个位数(最后一位) 12/10=1int[] cs = new int[3];//存储各位数 此例为三位数 提取范围 1-999int i = 0;//索引 // 121 while(num!=0){ cs[i++] = num % 10; num = num / 10;}//存储到数组后 i变量是数字的位数 也是数组的真实长度 //例如 提取23的各位数后 i为2原创 2021-06-19 16:09:54 · 1758 阅读 · 0 评论 -
Dictionary 字典
字典是泛型的Hashtable 使用方法类似引入命名空间using System.Collections.Generic;增删改查 遍历class Program { //字典是泛型的Hashtable static void Main(string[] args) { Dictionary<string, int> dic = new Dictionary<string, int>();//声明原创 2021-06-18 22:09:39 · 95 阅读 · 0 评论 -
List 列表
List 可变类型的泛型数组使用时需要添加 命名空间using System.Collections.Generic;优点 和ArrayList相比少了装箱和拆箱例子class Program{ static void Main(string[] args) { List<int> li = new List<int>();//存储整型 声明 初始化 不需要指定长度 指定存储类型即可 List<string> s原创 2021-06-15 20:59:35 · 109 阅读 · 0 评论 -
泛型 约束
作用:约束泛型语法:where 泛型字母:约束约束:struct 值类型 int floatclass 引用类型 string objectnew() 有公有无参构造函数类名 该类或者该类的子类接口名 接口或者继承接口的类型泛型字母 和泛型字母一致或者泛型字母的派生例子:class Program{ static void Main(string[] args) { Test<int> te = new Test<int>()原创 2021-06-09 15:02:40 · 121 阅读 · 0 评论 -
泛型
概念泛型将类型参数化,达到代码重用的目的泛型 只有骨骼没有躯体 传入的参数(int、float、bool等)类似躯体 使泛型有生命同样的框架 适用于不同的参数类型语法泛型占位字母 类似变量类型但该变量类型是空的 不表示任一变量类型只有传入变量类型 才可以使用传入哪个类型 该泛型占位字母 就被替换为传入的变量类型class 类名<泛型占位字母>interface 接口名<泛型占位字母>函数名<泛型占位字母>(参数列表)泛型占位字母可以有多个,用逗号原创 2021-05-25 13:24:33 · 63 阅读 · 0 评论 -
Hashtable 哈希表
提高查询速度键值对 一个键对应一个数值引用命名空间 using System.Collections;添加hashtable.Add(1, 1);hashtable.Add(1, 1);// 出错键不能重复原创 2021-05-22 16:59:35 · 197 阅读 · 0 评论 -
Queue 队列
Queue封装好的类本质是一个object数组先进先出 后进后出类似排队 队伍中第一个人先吃到饭 (正常情况下)使用时需要引用 using System.Collections;Queue queue = new Queue();增加queue.Enqueue(1);取出取出队头元素Console.WriteLine(queue.Dequeue());查看查看对头元素 但不移除Console.WriteLine(queue.Peek());查看元素是否在队列中Console.原创 2021-05-14 22:56:41 · 102 阅读 · 0 评论 -
Stack 栈
封装好的类 本质是一个object数组 存储方式不同后进先出 先进后出类似收集学生作业的情况第一个交在最下面 最后一个交在最上面 (正常情况下)使用前添加using System.Collections;添加 压栈stack.Push(1);//push 增加 参数为 object 类型 因此可以添加所有类型取出 弹栈Console.WriteLine(stack.Pop());//取出栈顶元素 取出后栈内不存在该元素查看只能查看栈顶元素Console.WriteLine(st原创 2021-05-14 18:37:23 · 68 阅读 · 0 评论 -
ArrayList 数组列表
是一个类 本质是一个object类型的数组可以使用里氏转换 存储任意对象使用前需要引入 using System.Collections;// 集合 Collections添加内容Add(object)AddRange(列表);//拼接在一起 列表放置在后面可以添加任意内容 object是万物之父 可以装载任意类型删除内容移除指定内容 从头找 删除第一个符合的元素Remove(列表中的元素)RemoveAt(索引)Clear();//清空查找内容根据索引查找ArrayList的对原创 2021-05-14 16:35:25 · 131 阅读 · 1 评论 -
布尔值问题
print(1 == 1);//输出 True 不是 trueprint(1 != 1);//输出 False 不是 false原创 2021-05-09 19:08:34 · 170 阅读 · 0 评论 -
面向对象七大原则
七大原则目的高内聚 低耦合单一职责类专注于单一的功能开闭原则类可以拓展但不能修改里氏转换父类装载子类对象依赖倒转依赖抽象不依赖具体的实现迪米特法则一个对象中的成员尽可能少的和其他类建立联系接口隔离一个接口不需要太多的行为 尽可能只提供一个功能合成复用尽量使用对象组合 而不是继承来达到复用的目的继承关系是强耦合 组合关系是低耦合...原创 2021-05-01 19:01:50 · 68 阅读 · 0 评论 -
C# 抽象类和接口的区别
同都可以被继承都不能直接实例化在子类中实现方法遵循里氏替换原则异抽象类可以有构造函数抽象类只能被继承单个 接口可以被继承多个抽象类中可以有成员变量 接口中无抽象类中可以有 成员方法 虚方法 抽象方法 接口中只有声明的方法抽象类中中可以使用访问修饰符 接口中不建议使用 默认公有的表示对象的用抽象类 表示行为的拓展用接口...原创 2021-04-30 23:52:01 · 61 阅读 · 1 评论 -
C# 结构体与类的区别
异结构体是值类型 类是引用类型结构体成员不能使用protected关键字结构体中的成员不能初始化结构体中不能无参构造函数结构体中声明构造函数后不会覆盖无参构造函数结构体中的成员变量必须在构造函数中进行赋值结构体不能设置为静态 内部可以有静态成员同结构体具有封装的特性 但不具备继承和多条的特性...原创 2021-04-30 23:39:13 · 127 阅读 · 1 评论 -
C# StringBuilder
字符串问题每次给字符串赋值 都会开辟新的内存空间 频繁赋值浪费内存解决方法使用StringBuilder 修改和拼接字符串不需要创建新的对象 提升性能需要引入命名空间using System.TextStringBuilder 类型的变量增加内容时 会自动扩大容量StringBuilder 初始化时 会开启一个较大的容量 字符串超过容量时 会自动扩大容量 减少字符串创建的频度StringBuilder初始化StringBuilder str = new StringBuilder(“123”原创 2021-04-30 23:01:52 · 370 阅读 · 1 评论 -
C# String中的方法
1.获取字符串中的字符字符串本质是一个字符数组 字符串类中有索引器利用索引器可以获取字符串中的字符字符串转换为字符数组 使用ToCharArray方法求字符串长度 使用Length方法string s=“123”;Console.WriteLine(s[0]);char[] chars=s.ToCharArray();2.字符串拼接string的Format方法 加占位符string.Format"{0}{1}",11,22);3.正向查找字符索引位置从字符串左侧开始查找 第一个符原创 2021-04-30 17:04:44 · 4076 阅读 · 1 评论 -
C# 万物之父中的方法
静态方法1.Equals比较两个对象是否相同 值类型比较数值 引用类型比较引用地址2.ReferenceEquals 比较引用类型是否相同 值类型比较返回值始终是false成员方法1.GetType获取对象运行时的类型2.MemberwiseClone 浅拷贝对象,返回一个新对象拷贝对象中的引用类型 而不拷贝值类型新对象中的值类型改变不影响 被拷贝的对象引用类型的改变影响 被拷贝的对象虚方法1.Equals 可以重写该方法2.GetHashCode 获取对象的哈希码3.ToStrin原创 2021-04-28 19:34:36 · 96 阅读 · 0 评论 -
C# 命名空间
概念命名空间类似工具包,命名空间内的类就像工具,引用命名空间就能使用其中的类语法namespace 空间名{类}使用使用方法1:using 空间名 类似把工具包拿出来使用使用方法2:空间名.类名注意1.不同的命名空间可以有同名的类引用两个有同名类的命名空间时 若使用同名类创建对象需要使用方法2确定 使用哪一个命名空间下的类2.命名空间可以重名写多个 但同一个空间下类不能重名3.命名空间下可以有命名空间4.命名空间下的类默认是公有的internal关键字 只能在该程序集中使用原创 2021-04-28 16:48:56 · 139 阅读 · 0 评论 -
C# 密封方法
概念使用sealed修饰的重写方法作用搭配override使用 让虚方法或抽象方法不能被重写原创 2021-04-28 16:14:40 · 72 阅读 · 0 评论 -
C# 接口
概念接口是行为的抽象规范接口是抽象行为的“基类”关键字:interface接口中不包含成员变量 只包含方法 属性 索引器 事件成员不能被实现 不能是私有的 访问修饰符可以不写 默认公有接口不能继承类 接口可以继承接口类可以继承多个接口 但必须实现接口内的所有成员作用接口可以被类继承 不能实例化 但可以作为容器存储对象遵循里氏转换原则 存储后只能使用该接口中的成员声明接口命名规则:英文大写字母"I"+帕斯卡命名法interface 接口名{}显示实现接口使用条件:类继承的多个接口原创 2021-04-28 15:23:51 · 67 阅读 · 0 评论 -
C# 抽象类 抽象方法
抽象类是一个概念 例如 东西、水果、动物abstract修饰的类特点不能被实例化 但遵循里氏转换 父类可以装载子类可以包含抽象方法继承抽象类必须重写抽象方法抽象方法abstract修饰的方法特点抽象方法写在抽象类中没有方法体 不用写大括号里的逻辑以及大括号不能是私有的继承后必须实现 用override重写抽象方法虚方法可以选择性实现...原创 2021-04-28 11:46:25 · 98 阅读 · 0 评论 -
C# 多态
作用让继承同一父类的子类们,调用相同的方法有不同的效果关键字virtual 修饰虚函数override 重写虚函数base 代表父类使用父类装载子类后,不需要里氏转换就能使用子类方法系统根据对象实例的类型来决定调用父类还是子类的方法,而不是根据声明的变量类型来决定。...原创 2021-04-28 11:14:41 · 62 阅读 · 0 评论