首页
关于
文章打赏记录
Search
1
项目一:Revit电缆自动布置
29 阅读
2
第十四章结课考试
3 阅读
3
revit二次开发入门
3 阅读
4
Dynamo 连缀属性
2 阅读
5
Dynamo 为当前视图添加过滤器
1 阅读
Dynamo
UnrealEngine
Python
C#编程技术基础
C#实战项目
随笔
登录
Search
标签搜索
CSharp
基础知识
Dynamo
数据应用
UnrealEngine
BIM管理
TomHanck4
累计撰写
22
篇文章
累计收到
6
条评论
首页
栏目
Dynamo
UnrealEngine
Python
C#编程技术基础
C#实战项目
随笔
页面
关于
文章打赏记录
搜索到
9
篇与
的结果
2022-06-20
第十四章结课考试
一、选择题(每小题2分,共20分) 1、C#是一种面向( )的语言。 A.机器 B.过程 C.对象 D.事物 2、在C#中,定义派生类时,指定其基类应使用的语句是( )。 A.Inherits B.: C.Class D.Overrides 3、类的以下特性中,可以用于方便地重用己有的代码和数据的是( )。 A.多态 B.封装 C.继承 D.抽象 4、在Array类中,可以对一维数组中的元素进行排序的方法是( )。 A.Sort() B.Clear() C.Copy() D.int.Parse() 5、将变量从字符串类型转换为数值类型可以使用的类型转换方法是( )。 A.Str() B.Cchar() C.CStr() D.int.Parse() 6、在C#中定义接口时,使用的关键字是( )。 A.interface B.: C.class D.overrides 7、以下说法正确的是( )。 A.接口可以实例化 B.类只能实现一个接口 C.接口的成员都必须是未实现的 D.接口的成员前面可以加访问修饰符 8、下列关于抽象类的说法错误的是( )。 A.抽象类可以实例化 B.抽象类可以包含抽象方法 C.抽象类可以包含抽象属性 D.抽象类可以引用派生类的实例 9.下列关于重载的说法,错误的是( )。 A.方法可以通过指定不同的参数个数重载 B.方法可以通过指定不同的参数类型重载 C.方法可以通过指定不同的参数传递方式重载 D.方法可以通过指定不同的返回值类型重载 10.关于虚方法实现多态,下列说法错误的是( )。 A.定义虚方法使用关键字virtual B.关键字virtual可以与override一起使用 C.虚方法是实现多态的一种应用形式 D.派生类是实现多态的一种应用形式二、简答题(每小题5分,共20分)二、简答题(每小题5分,共20分) l、简述private、protected、public修饰符的作用 答: 2、构造方法的特征和作用 答: 3、简述接口和抽象类的区别。 答: 4、什么是序列化和反序列化? 答: 三、编码题(每小题20分,共60分)1、编写一个C#应用程序,该程序包括3个类:Monkey类、People类和主类Program类(20分) 要求: (1)Monkey类中有个构造方法:Monkey(String name),并且有个public void Speak()方法,在speak方法中输出“咿咿呀呀......”的信息。 (2)People类是Monkey类的子类,在People类调用Monkey的构造方法,重写方法Speak(),在Speak方法中输出“小样的,不错嘛!会说话了!”的信息。 (3)在People类中新增方法void Think(),在Think方法中输出“别说话!认真思考!”的信息。 (4)在主类Program的Main方法中创建Monkey与People类的对象类测试这2个类的功能。 2、接口和抽象类(20) 汽车租赁公司,出租汽车种类有客车、货车和皮卡三种,每辆汽车除了具有编号、名称、租金三个基本属性之外,客车有载客量,货车有载货量,皮卡则具有载客量和载货量。 实现思路: l)需要定义两个接口,一个抽象类car,三个类:PassengerCar、Truck、Pickup.. 2)抽象类汽车Car:属性有:编号No,名称:Name,租金Rent 3)接口A:定义载货量方法ZaiHuoMethod() 4)接口B:定义载客量方法ZaiKeMethod() 5)子类客车PassengerCar继承汽车租赁公司Car,特有属性:载客量ZaiKe。继承接口B. 6)子类货车Truck继承汽车租赁公司Car,特有属性:载客量ZaiHuo。继承接口A. 7)子类货车Pickup继承汽车租赁公司Car,特有属性:载客量ZaiKe。载客量ZaiHuo.继承接口A和B. 8)在主函数中分别实例化三种汽车,并输出汽车的相关信息。 3、编一个程序,定义类Student和它的成员(私有字段、属性和方法)(学号,姓名,年龄、成绩、和输出个人所有信息的方法),用类Student生成三个对象s1,s2,s3,给对象s1,s2,s3的成员赋值后,将对象添加到泛型List<Student>中,通过foreach循环遍历输出对象的所有信息。(20分)
2022年06月20日
3 阅读
0 评论
1 点赞
2022-06-18
第十三章综合项目--模拟打斗程序
第十三章综合项目--模拟打斗程序初级项目1.任务编号:2.任务名称:模拟一个打斗程序3.任务所属课程名称:类的定义、常用类、封装4.任务难度:C-简单5.任务描述:1)编写一个控制台程序,实现一个简单的战斗程序。 2)首先定义一个基类英雄(Hero) 属性:(名字Name、血量HP、蓝量MP,基础伤害下限BaseHurtLow,基础伤害上限BaseHurtHigh,基础防御下限BaseDefenseLow,基础防御上限Base DefenseHigh) 构造方法:默认属性:血量1000,蓝量800,基础伤害下限100,基础伤害上限300,基础防御下限0,基础防御上限100 方法:基础攻击Attack())基础防御Defense() 攻击伤害=攻击下限到攻击上限的一个随机值,攻击伤害应减去被攻击者的防御值 3)定义一个打斗(Battle)类,用于控制交战。 类中包涵有一个方法FightGo(Hero a,Hero b),主要作用是:a先开始攻击b一下,然后b攻击a一下,互相来回攻击直至某个对象生命值为0为止,每次攻击对方可以选择 基础攻击还是技能攻击,扣除的生命值是在自己Attacklow和AttackHigh之间取一个随机值。方法中显示每次来回打斗的信息,包括对方英雄名字,扣除的生命值及剩余 的生命值等。 在main方法中定义2个英雄Hero对象,执行FightGo方法,来完成一次战斗过程。6.提示 产生随机数可以参考Random类, 攻击进度控制System.Threading.Thread.Sleep(1000);/休眠1秒参考代码-初级先定义一个Hero类隐藏内容,请前往内页查看详情再定义一个Battle类隐藏内容,请前往内页查看详情主程序定义两个Hero对象隐藏内容,请前往内页查看详情中级项目1.任务编号:2.任务名称:模拟一个打斗程序3.任务所属课程名称:类的定义、常用类、封装、继承、多态4.任务难度:B-适中5.任务描述:1)编写一个控制台程序,实现一个简单的战斗程序。 2)首先定义一个基类英雄(Hero) 属性:(名字Name、血量HP、蓝量MP,基础伤害下限BaseHurtLow,基础伤害上限BaseHurtHigh,基础防御下限BaseDefenseLow,基础防御上限BaseDefenseHigh) 构造方法:默认属性:血量1000,蓝量800,基础伤害下限100,基础伤害上限300,基础防御下限0,基础防御上限100 也可以用户自定义属性: 方法:基础攻击Attack() 基础防御Defense() 攻击伤害=攻击下限到攻击上限的一个随机值 3)再定义三个职业继承英雄类 战士(Soldier): 属性:(技能SkillName,技能伤害下限SkillHurtLow,技能伤害上限SkillHurtHigh,技能消耗蓝量SkillMP) 构造方法:战士构造方法中基础血量+300,蓝量-200,防御+50 方法:重写父类攻击方法Attack() 用户可选择发动物理攻击或技能攻击 物理攻击:攻击伤害=攻击者基础攻击值-被攻击者基础防御 技能攻击:攻击伤害=攻击者技能攻击值-被攻击者基础防御 注意:技能伤害消耗相应蓝值,蓝值不够不能发动技能攻击,只能发动物理攻击 射手(Shooter): 属性:(技能SkillName,技能伤害下限SkillHurtLow,技能伤害上限SkillHurtHigh,技能消耗蓝量SkillMP) 构造方法:射手构造方法中基础血量-300,攻击+120,防御-20 方法:技能伤害SkillAttack() 刺客(Assassin): 属性:(技能SkillName,技能伤害下限SkillHurtLow,技能伤害上限SkillHurtHigh,技能消耗蓝量SkillMP) 构造方法:刺客构造方法中基础伤害+120,基础血量-100,防御-20 方法:技能伤害SkillAttack() 同时定义构造函数用于初始化这些信息。参考代码-中级先定义一个Hero类,添加技能相关的属性,在Attack的方法中添加技能攻击隐藏内容,请前往内页查看详情添加3个职业类隐藏内容,请前往内页查看详情添加一个Battle类隐藏内容,请前往内页查看详情主程序添加两个职业类及技能名隐藏内容,请前往内页查看详情
2022年06月18日
1 阅读
0 评论
0 点赞
2022-06-15
第十二章文件处理
第十二章文件处理目标了解System.IO命名空间文件和目录的常用操作方法使用文件流读写文本文件使用文件流读写二进制文件掌握打开文件、保存文件对话框的使用序列化和反序列化System.IO命名空间对文件操作System.lo命名空间操作各种流类数据System.Text命名空间关于字符编码的类File类文件操作静态类方法描述Create(string filePath)在指定路径下创建指定名称的文件Copy(string sourceFile,string desFile)按指定路径将源文件中的内容复制到目标文件中,如果目标文件不存在将新建目标文件Delete(string filePath)删除指定路径的文件Exists(string filePath)验证指定路径的文件是否存在Move(string sourceFile,string desFile)将指定文件移动到一个新的路径实例using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO;//读写文件流操作 namespace Lesson12_1 { class Program { static void Main(string[] args) { //File类内包含用于处理文件的静态方法 if (!File.Exists(@"D:\aa.txt")) { File.Create(@"D:\aa.txt"); } else { File.Copy(@"D:\aa.txt", @"D:\bb.txt"); } File.Delete(@"D:\aa.txt"); } } }using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace Lesson12_2 { class Program { static void Main(string[] args) { //Directory类包含了处理目录的静态方法 Directory.CreateDirectory("@D:/测试目录"); } } }Directory类目录(文件夹)操作静态类方法描述CreateDirectory(string path)创建目录Dele(string path[,bool recursive])删除指定的目录,如果第二个参数为true则同时删除该目录下的所有文件和子目录Exists(string path)测试目录是否存在GetCurrentDirectory()获得应用程序的当前工作目录GetDirectories(string path)返回代表子目录的字符串数组GetFiles(string path)以字符串数组形式返回指定目录中的文件的名称Move(string sourcePath,string desPath)将目录及其内容移到指定的新位置读写文本文件文件流FileStream构造方法FileStream(filePath,FileMode,[FileAccess],[FileShare])filePath是string类型其余3个是枚举类流读取对象StreamWriter类流写入对象Write()WriteLine()Close()StreamReader类流读取对象ReadLine()ReadToEnd()Close()方法二进制文件的读写BinaryReader类BinaryWriter类实例using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace Lesson12_3 { class Program { static void Main(string[] args) { //1、 FileStream fs = new FileStream(@"D:\二进制.data",FileMode.Create); //2、二进制写入对象 BinaryWriter bw = new BinaryWriter(fs); //3、写入二进制文件 for (int i = 0; i < 10; i++) { bw.Write(i); } Console.WriteLine("已写入"); //4、 bw.Close(); //5、 fs.Close(); Console.WriteLine("=================================读取二进制文件============================================="); //1、 FileStream fr = new FileStream(@"D:\二进制.data", FileMode.Open,FileAccess.Read); //2、二进制读取对象 BinaryReader br = new BinaryReader(fr); //3、读取二进制文件 try { while (true) { int num = br.ReadInt32(); Console.WriteLine(num); } } catch (EndOfStreamException ex) { Console.WriteLine("读取完成"); } //4、 bw.Close(); //5、 fs.Close(); } } }复制图片到指定目录using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace Lesson12_4 { class Program { static void Main(string[] args) { //读取图片的二进制信息 FileStream fs = new FileStream(@"D:\Desktop\示例图片.jpg", FileMode.Open,FileAccess.Read); BinaryReader br = new BinaryReader(fs); //读取文件信息 byte[] b = br.ReadBytes((int)fs.Length); br.Close(); fs.Close(); //复制图片--其实就是在另一个路径写入图片信息 FileStream fsWrite = new FileStream(@"E:\示例图片1.jpg", FileMode.Create); BinaryWriter bw = new BinaryWriter(fsWrite); //将读出的字节数组写入到文件 bw.Write(b); Console.WriteLine("图片复制成功"); bw.Close(); fsWrite.Close(); } } }序列化和反序列化序列化将 对象 的状态存储到特定的文件中Serialize()反序列化是序列化的逆向过程,也就是将文件里保存的数据还原为对象Deserialize()步骤引用命名空间using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters; using System.Runtime.Serialization.Formatters.Binary;[Serializable]必须写在类定义前面,表示后面的类可以被序列化实例序列化是面向对象的所以先创建一个类using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Lesson12_5 { [Serializable]//[Serializable]必须写在类定义前面,表示后面的类可以被序列化 class Student { public int StuId { get; set; } public string Name { get; set; } public int Age { get; set; } public string Sex { get; set; } public Student(int StuId, string Name,int Age,string Sex) { this.StuId = StuId; this.Name = Name; this.Age = Age; this.Sex = Sex; } } }然后对实例化这个类并进行序列化和反序列化操作using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters; using System.Runtime.Serialization.Formatters.Binary; namespace Lesson12_5 { class Program { static void Main(string[] args) { Student stu = new Student(1,"fsy",29,"Man"); BinaryFormatter bf = new BinaryFormatter(); FileStream fs = new FileStream(@"D:\MyFile.bin", FileMode.Create, FileAccess.Write); //对象序列化 bf.Serialize(fs,stu); fs.Close(); Console.WriteLine("序列化成功"); Console.WriteLine("=============反序列化============"); //BinaryFormatter bf = new BinaryFormatter(); FileStream fsReader = new FileStream(@"D:\MyFile.bin", FileMode.Open, FileAccess.Read); //反序列化 Student stu1= bf.Deserialize(fsReader) as Student; fsReader.Close(); Console.WriteLine("学号{0},姓名{1},年龄{2},性别{3}",stu1.StuId,stu1.Name,stu1.Age,stu1.Sex); } } }总结File类静态对象实现对文件的创建、拷贝、移动和删除等操作Directory类静态对象实现对目录(文件夹)的操作文件流对象FileStream对象创建该对象时需要指定操作文件的路径、文件的打开方式文件读写权和文件访问方式(可选)流读写对象StreamReader是流读取对StreamWriter是文件写入对象。二进制文件的读写BinaryReaderBinaryWriter序列化和反序列化序列化是将对象的状态存储到特定的文件中。反序列化是将存储在文件中的数据重新构建为对象类对象是否可被序列化,关键是在类的头部添加[Serializable]关键字
2022年06月15日
0 阅读
0 评论
0 点赞
2022-06-13
第十一章调试与异常
第十一章调试与异常目标理解如何调试应用程序和排除错误掌握如何测试C#应用程序在程序中进行错误捕获和错误处理调试必要性在不熟应用程序前必须先对其进行调试在事物处理过程中,系统显示错误信息错误类型语法错误逻辑错误运行时错误调试过程观察程序运行时行为跟踪变量的值确定语义错误的位置VS中的操作步骤合理设置断点鼠标右键F9运行DebugF5F10单步执行VS.NET调试工具“局部变量”窗口“监视”窗口“即时”窗口“快速监视”窗口异常C#中的异常处理语句异常是由try语句来处理的try语句提供了一种机制来捕捉块执行过程中发生的异常C提供了3种异常处理结构:try-catchtry-catch-finallytry-finallytry块:try块监视可能抛出异常的语句。 try { //statements that may cause an exception }·try块管理包含在它内部的语句,定义与它相关的异常处理程序的范围。·try块必须至少有一个catch块。C#引发异常有以下两种方式使用显式throwi语句来引发异常控制权无条件转到处理异常的部分代码使用语句或表达式在执行过程中激发了某个异常的条件,使得操作无法正常结束,从而引发异常Try......Catch......Finally I/O设备异常 try { //程序代码 } catch(IOException E) { //错误处理代码 }System.Exception可以是系统中任何一种异常Try/catch/finally异常Catch可以多重Finally块一般清理内存用Try块中最后执行System.Exception属性含义Message描述当前异常对象的字符串Source引必当前异常对象的程序或对象名称StackTrace发异常时调用堆栈上的帧的字符串表示InnerException表示引发当前异常的内部异常对象常用异常类ArithmeticException数学运算、类型转换异常类InvalidCastException不正确转型异常。例如String转Decimal操作。IndexOutOfRangeException数组访问越界异常。NullReferenceException空引用对象异常。实例using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Collections; namespace Lesson11_2 { class Program { static void Main(string[] args) { ArrayList list = new ArrayList(); try { //程序尝试执行的代码 list.Add(0); list.Add(1); list.Add("2"); list.Add(3); list.Add(4); Console.WriteLine(list[7]); foreach (int item in list) { Console.WriteLine(item); } } catch (IndexOutOfRangeException indexOut)//下标越界异常 { Console.WriteLine(indexOut.Message); } catch (Exception ex)//想要捕获的异常类型 { //错误处理代码 Console.WriteLine(ex.Message);//输出异常的信息 } finally { //不管有没有出现异常或者异常有没有被处理,都会最终执行的代码 Console.WriteLine("程序终止!"); } } } }Throw语句自定义异常当开发人员需要提供更为广泛的信息,或需要程序具有特殊功能时,就可以定义自定义异常。首先要创建一个自定义异常类,该类必须直接或间接派生自System.ApplicationException。using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Lesson11_3 { /// <summary> /// 除数不能为0为异常 /// </summary> class MyCustomException:ApplicationException { public MyCustomException() { } public MyCustomException(string message) : base(message) { } } }using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Lesson11_3 { class Program { static void Main(string[] args) { Console.WriteLine("请输入你的除数"); int divisor = int.Parse(Console.ReadLine()); try { if (divisor==0) { throw new MyCustomException("除数不能为0"); } } catch (MyCustomException ex) { //throw ex; Console.WriteLine("自定义异常信息"+ex.Message); } } } }注意事项请勿将try/catch块处于控制流。用户只能处理catch异常。不得声明空catch块。避免在catch块内嵌套try/catch只有使用finally块才能从try语句中释放资源。总结调试搜寻和消除应用程序中的错误的过程。语法错误表示编译器无法理解代码。“局部变量”窗口允许用户监控当前方法中所有局部变量的值。异常当应用程序遇到运行时错误,就会引发异常。C#中的所有异常都派生自System.Exception类。
2022年06月13日
0 阅读
0 评论
0 点赞
2022-06-12
第十章集合与泛型
第十章集合与泛型目标使用System.Array操作数组集合使用System.ArrayListi对象使用System.Hashtable对象理解泛型集合类List对象掌握Dictionary<TKey,TValue>掌握Lambda表达式IComparable接口的应用泛型接口IComparable接☐IComparer接口{dotted startColor="#ff6c6c" endColor="#1989fa"/}System.Array抽象的基类提供Createlnstance方法创建数组可以是多维的下标可设置System.Array的属性和方法属性描述Length得到数组所有维元素总个数的属性实例方法描述Copyto()将一个一维数组中的所有元素复制到另一个一维数组中GetLength()返回指定维的元素个数GetVaule通过索引返回指定元素的值SetVaule将数组中的指定元素设为指定值静态方法描述BinarySearch()使用二进制搜索方法搜索一维已排序数组中的某个值Clear()将数组中一组元素设为0或nullCopy()将数组中的一部分元素复制到另一个数组中CreateInstance()初始化Array类的实例Indexof()返回给定值在一维数组中首次出现的位置索引Last Indexof()返回给定值在一维数组中最后一次出现的位置索引Reverse()反转给定一维数组中元素的顺序Resize()将数组的大小更改为指定的新大小Sort()将数组中的元素进行排序,只能对一维数组从小到大排序实例 static void Main(string[] args) { //系统类可以按F12看定义 //用Array(抽象类)创建数组 Array arr = Array.CreateInstance(typeof(int),5);//创建int类型长度为5的数组 arr.SetValue(89, 0);//为数组元素设置值 arr.SetValue(95, 1); Console.WriteLine(arr.Length); foreach (int item in arr) { Console.WriteLine(item); } for (int i = 0; i < arr.Length; i++) { Console.WriteLine("数组中第{0}个元素是:{1}",i+1,arr.GetValue(i)); } }{dotted startColor="#ff6c6c" endColor="#1989fa"/}集合System.Collectionsi命名空间ArrayList类Hashtable类集合-ArrayList类容量可以根据需要动态扩展。通过设置ArrayList..Capacityl的值可以执行重新分配内存和复制元素等操作批量操作提供的方法在某个时间追加、插入或移出一组元素一维下标不可设置实例 static void Main(string[] args) { //实例化一个集合 ArrayList list = new ArrayList(4); list.Add(10); list.Add("FSY"); list.Add(101.101); People pl = new People(); list.Add(pl); foreach (var item in list) { Console.WriteLine(item); } list.Add("1"); //移除集合中的元素,集合容量不变 list.Remove(10); //如果添加元素时添加的个数大于容量时,容量会自动增加一倍 Console.WriteLine("集合的个数是"+list.Count); Console.WriteLine("集合的容量是"+list.Capacity); //将集合容量设置为集合的实际个数 list.TrimToSize(); Console.WriteLine("集合的个数是" + list.Count); Console.WriteLine("集合的容量是" + list.Capacity); }集合-Hashtable类将数据作为一组键值对来存储键索引器不可重复属性描述Count该属性用于获取哈希表中键值对的数量方法描述Add()将一个键值对添加到哈希表中ContainKey()测试键是否已经存在Remove()根据键将对应的键值对从哈希表移除实例 static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add(1,"FSY"); ht.Add(2, "ZLY"); ht.Add("FSY", "ZLY"); Console.WriteLine("有{0}个元素",ht.Count); Console.WriteLine(ht.ContainsKey("FSY")); if (ht.ContainsKey(1)==true) { Console.WriteLine(ht[1]); } //集合没有类型限制,很容易出现类型访问错误,类型是不安全的 foreach (var item in ht.Keys) { Console.WriteLine(ht[item]); } }泛型集合明确指定放入集合中对象的数据类型优点类型安全使用泛型集合编译器会在编译期间检查要放入集合的对象的数据类型,如果发现不是某种特定的类型就会报错提高性能存取数据时不会发生类型转换,特别是存取值类型时不会发生装箱和拆箱操作System.Collections.Generici命名空间 List<T> Dictionary<K,V>List语法泛型集合类<数据类型>实例名=new泛型集合类<数据类型>()添加和访问元素、插入和删除元素、清空集合、把元素复制到数组中,而且可以搜索和转换元素、使元素逆序等高级操作FindAll()方法检索ForEach()方法可以使用委托对集合的每一个成员进行操作实例 class Program { static void Main(string[] args) { //泛型集合 //定义一个Student类型的泛型集合 List<Student> list = new List<Student>(); //实例化4个学生对象 Student stu1 = new Student("张三", 1); Student stu2 = new Student("李四", 2); Student stu3 = new Student("王五", 3); Student stu4 = new Student("赵六", 4); //向泛型集合添加元素 list.Add(stu1); list.Add(stu2); list.Add(stu3); list.Add(stu4); Console.WriteLine(list.Count); foreach (Student item in list) { Console.WriteLine("学号:{0},姓名:{1}",item.StuId,item.Name); } //效果与foreach一致 list.ForEach(delegate (Student s) { Console.WriteLine("学号:{0},姓名:{1}", s.StuId,s.Name); }); //在泛型集合中查找所有学号小于3的学生 List<Student> listFind = list.FindAll(delegate (Student s) { if (s.StuId < 3) { return true; } else { return false; } }); listFind.ForEach(delegate (Student s) { Console.WriteLine("学号:{0},姓名:{1}", s.StuId, s.Name); }); }Dictionary<K,V>语法Dictionary<数据类型,数据类型>实例名=new Dictionary<数据类型,数据类型>();Dictionary<TKey,Value>类的功能与HashTable类类似,也是通过键值对来存储元素。TKey表示键的数据类型TValue表示值的数据类型。实例 class Program { static void Main(string[] args) { //泛型集合 //定义一个Student类型的泛型集合 List<Student> list = new List<Student>(); //实例化4个学生对象 Student stu1 = new Student("张三", 1); Student stu2 = new Student("李四", 2); Student stu3 = new Student("王五", 3); Student stu4 = new Student("赵六", 4); //向字典类添加元素 dicStu.Add(stu1.StuId, stu1); dicStu.Add(stu2.StuId, stu2); dicStu.Add(stu3.StuId, stu3); dicStu.Add(stu4.StuId, stu4); //dicStu.Add(stu4.Name,stu4);错,数据类型必须保持一致 foreach (int item in dicStu.Keys) { Console.WriteLine(dicStu[item].Name); } }对象与集合初始化器集合初始化器用来初始化一个集合,它由一系列元素组成,并封闭于“{”和“}”标记内//对象初始化器 Student s1 = new Student{SId=101, SName="张三"}; Student s2 = new Student{SId=102, SName="李四"}; //集合初始化器 List<Student> lstStu = new List<Student> {s1,s2};实例 static void Main(string[] args) { //实例化学生对象 //对象初始化器 Student stu1 = new Student { SId = 1, Name = "FSY" }; Student stu2 = new Student { SId = 2, Name = "YSF" }; //集合初始化器 List<Student> list = new List<Student> { stu1, stu2 }; foreach (Student item in list) { Console.WriteLine("学号:"+item.SId+",姓名"+item.Name); } }Lambda表达式s是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或飙到式目录树类型基本形式(inputparameter)=>expression=>读作“goes to”Lambda语句(inputparameter)=>{statement;};实例 static void Main(string[] args) { //Lambda表达式 //语法:参数=>表达式 int[] arr = { 436, 67, 78, 9, 3, 57, 2, 7, 9, 1 }; //查找数组中奇数的个数 Console.WriteLine(arr.Count(n => n % 2 == 1)); /* public static bool JiSuan(int n) { if (n %== 1) { return truwe; } else { return false; } } */ }总结Array类Createlnstance方法来创建Array对象属于System命名空间集合用于管理在运行时动态创建的元素项集合ArrayList类可以批量操作Hashtable类键值对System.Collections命名空间泛型集合ListDictionary<Tkey,Tvalue>类型安全属于System.Collections.Generic命名空间Lambda表达式一种更纯粹的匿名方法
2022年06月12日
0 阅读
0 评论
0 点赞
1
2