网站没快照网站系统管理员模块

张小明 2025/12/31 13:03:29
网站没快照,网站系统管理员模块,用WordPress建什么站好,网站建设服务器出租目录 一、List 高级用法#xff1a;告别繁琐循环 1. 核心高级方法#xff08;Predicate委托驱动#xff09; 2. 实战代码示例#xff08;Worker 类操作#xff09; 3. 核心优势 4.Predicate与方法底层逻辑二、集合框架#xff1a;栈、队列与字典 1. 栈 Stack#x…目录一、List 高级用法告别繁琐循环1. 核心高级方法Predicate委托驱动2. 实战代码示例Worker 类操作3. 核心优势4.Predicate 与方法底层逻辑二、集合框架栈、队列与字典1. 栈 Stack先进后出LIFO2. 队列 Queue先进先出FIFO3. 字典 Dictionary 键值对高效存储核心特性底层原理最易出错的 3 个场景优化性能三、泛型类型安全与代码复用的利器1. 为什么需要泛型2. 泛型的三种使用场景1泛型类2泛型方法3泛型约束面试重点3. 实战案例字典转对象反射 泛型四、IO 流文件操作的核心1. 路径操作Path 类2. 文件 / 目录操作File/Directory 类3. 流操作Stream 类1字节流FileStream万能流2字符流StreamReader/StreamWriter文本文件专用3缓冲流BufferedStream提升性能五、委托函数式编程与事件驱动的基石1. 委托的本质2. 委托的使用步骤3. 实战场景自定义集合 FindAll 方法4. 委托的高级应用总结知识点大纲一、List 高级用法告别繁琐循环List作为最常用的泛型集合其高级方法能大幅简化代码。1. 核心高级方法Predicate委托驱动方法功能实战场景Find()返回第一个匹配元素查找指定姓名的工人如 li4FindAll()返回所有匹配元素筛选薪水 3000 的工人FindIndex()返回第一个匹配元素索引在 li4 前插入新工人Exists()判断元素是否存在检查是否有指定姓名的工人RemoveAll()删除所有匹配元素批量删除薪水 3200 的工人ForEach()遍历集合元素批量打印工人信息2. 实战代码示例Worker 类操作// 1. 初始化工人集合 List workers new ListWorker(){ new Worker(){Namezhang3, Age18, Salary3000m}, new Worker(){Nameli4, Age25, Salary3500m}, new Worker(){Namewang5, Age22, Salary3200m} }; // 2. 在li4前插入zhao6FindIndex简化索引查找 int li4Index workers.FindIndex(work work.Name li4); if(li4Index -1) workers.Insert(li4Index, new Worker(){Namezhao6, Age24, Salary3300m}); // 3. 删除wang5RemoveAll精准匹配 workers.RemoveAll(work work.Name wang5); // 4. 筛选薪水3000的工人并打印 var highSalaryWorkers workers.FindAll(work work.Salary 3000); highSalaryWorkers.ForEach(work Console.WriteLine(work.ToString()));3. 核心优势无需手动写循环代码简洁易读基于 Predicate支持灵活的条件筛选类型安全避免装箱拆箱开销4.PredicateT与方法底层逻辑List 的高级方法Find/FindAll 等核心依赖PredicateT委托我们先拆解这个 “隐藏核心”再深入方法的细节Predicate定义public delegate bool Predicatein T(T obj);输入 T 类型参数返回 bool特性协变in 关键字允许传入派生类类型如Predicate可接收Predicate底层关联List 的高级方法本质是 “遍历集合 执行 Predicate 委托判断”简化手动循环的模板代码底层性能对比手动 for 循环 vs List.ForEach ()性能几乎一致ForEach () 底层也是 for 循环Find () vs 手动遍历Find () 代码更简洁但无性能优势均为 O (n)大数据量优化当 List 元素数 10 万时优先用HashSetT查找 O (1)替代 List或先 Sort () 再用 BinarySearch ()二、集合框架栈、队列与字典除了 ListC# 还提供了针对特定场景的集合类型解决不同数据存储需求1. 栈 Stack先进后出LIFO核心方法Push()入栈先检查容量不足则扩容再将元素存入_array[_size]Pop()出栈先判断_size0否则抛 InvalidOperationException再返回_array[--_size]不删除元素仅修改_size 指针下次 Push 会覆盖Peek()查看栈顶易错点Pop () 前必须检查 Count0否则抛异常比 Peek () 更易出错底层存储数组默认初始容量 10满了之后扩容为原容量 ×2适用场景表达式求值、方法调用栈、撤销操作面试题入栈顺序 1,2,3,4,5出栈顺序可以是怎么样的2. 队列 Queue先进先出FIFO核心方法Enqueue()入队将元素存入_array[_tail]_tail递增超过数组长度则回到 0_sizeDequeue()出队返回_array[_head]_head递增_size--同样不删除元素仅移动指针Peek()查看队头频繁 Enqueue/Dequeue 后可用TrimExcess()缩容仅当元素数 容量 90% 时生效大数据量场景初始化时指定容量new QueueT(capacity)避免多次扩容底层存储循环数组避免数组移位开销核心字段_head队头索引、_tail队尾索引、_size元素个数适用场景消息队列、任务调度、打印队列优化技巧TrimExcess()缩容当元素数 % 时3. 字典 DictionaryTKey,TValue键值对高效存储核心特性键唯一不可为 null值可重复底层基于哈希表查找 / 插入 / 删除效率 O (1)Entry 结构int hashCode键的哈希码、TKey key、TValue value、int next下一个 Entry 的索引解决哈希冲突buckets 数组长度为质数默认 3扩容后仍为质数减少哈希冲突概率哈希冲突处理链地址法每个 bucket 对应一个 Entry 链表插入元素时计算 key 的哈希码→取模得到 bucket 索引→若 bucket 已有关联 Entry则通过 next 字段链接到链表尾部相比非泛型 Hashtable类型安全无装箱拆箱开销// 初始化字典 Dictionarystring, Student studentDict new Dictionary(){ {1, new Student{Id1, Name张三, Age18}}, {2, new Student{Id2, Name李四, Age20}} }; // 新增/修改元素 studentDict[3] new Student{Id3, Name王五, Age19}; // 新增 studentDict[2] new Student{Id2, Name李四, Age21}; // 修改 // 安全获取值避免KeyNotFoundException if(studentDict.TryGetValue(2, out Student liSi)) Console.WriteLine(liSi.Name); // 按值排序扩展方法 var sortedStudents studentDict.OrderByDescending(kvp kvp.Value.Age);底层原理核心结构Entry[]存储键值对 buckets[]存储 Entry 索引解决哈希冲突冲突处理链地址法拉链法通过next字段形成链表扩容机制加载因子 0.72 时触发扩容容量翻倍并重新哈希最易出错的 3 个场景场景 1键为引用类型修改键的属性导致哈希码变化// 错误示例 public class Person { public string Name { get; set; } } Dictionary dict new Dictionary, int(); Person p new Person{Name张三}; dict.Add(p, 1); p.Name 李四; // 修改键的属性导致哈希码变化 Console.WriteLine(dict.ContainsKey(p)); // 返回false找不到键 // 正确键必须是不可变类型如string、int或确保添加后不修改键的属性场景 2用 foreach 遍历字典时修改元素// 错误foreach遍历期间不能添加/删除元素抛InvalidOperationException foreach (var kvp in studentDict) { if (kvp.Value.Age ) { studentDict.Remove(kvp.Key); // 报错 } } // 正确先收集要修改的键再遍历修改 var keysToRemove studentDict.Where(kvp kvp.Value.Age Select(kvp kvp.Key).ToList(); foreach (var key in keysToRemove) { studentDict.Remove(key); }场景 3忽略 KeyNotFoundException// 错误直接通过索引获取无匹配键时抛异常 Student s studentDict[3]; // 正确用TryGetValue性能更优无需先ContainsKey if (studentDict.TryGetValue(3, out Student s)) { // 处理s } else { // 无匹配键的处理逻辑 }优化性能初始化时指定容量new DictionaryTKey,TValue(expectedSize)避免扩容扩容时需重新哈希所有元素自定义键的 GetHashCode ()确保哈希码均匀分布减少冲突冲突多会导致链表变长查找效率降为 O (n)避免用值类型作为键值类型会装箱除非用 struct 且重写 GetHashCode () 和 Equals ()大数据量用 ConcurrentDictionary多线程场景下比 lock Dictionary 性能更优三、泛型类型安全与代码复用的利器泛型是 C# 的核心特性之一解决了 “重复代码” 与 “类型不安全” 的痛点1. 为什么需要泛型避免方法重载冗余如Fun1(int)、Fun1(string)替代 object 类型消除装箱拆箱开销编译时类型检查提升代码安全性2. 泛型的三种使用场景1泛型类public class Demo private T _data; public T Data { get _data; set _data value; } } // 使用 DemoDemo new Demo(); intDemo.Data 10; Demostring strDemo new DemoDemo.Data Hello;2泛型方法// 冒泡排序泛型实现支持所有实现IComparableT的类型 public static void BubbleSort(T[] arr) where T : IComparable { if(arr null || arr.Length 0) throw new ArgumentException(数组不能为空); bool swapped; for(int i 0; i arr.Length - 1; i) { swapped false; for(int j 0; j - i - 1; j) { if(arr[j].CompareTo(arr[j1]) 0) { // 交换元素 T temp arr[j]; arr[j] arr[j1]; arr[j1] temp; swapped true; } } if(!swapped) break; // 已有序提前退出 } }3泛型约束面试重点通过where关键字限制泛型类型范围常见约束约束说明where T : structT 必须是值类型where T : classT 必须是引用类型where T : new()T 必须有无参构造函数where T : 基类名T 必须继承自指定基类where T : 接口名T 必须实现指定接口3. 实战案例字典转对象反射 泛型public static U ConvertRowToObject(Dictionary row) where U : new() { U obj new U(); // 反射获取类的所有属性 var properties typeof(U).GetProperties(); foreach(var prop in properties) { // 匹配字典中的键值对并赋值 if(row.ContainsKey(prop.Name) row[prop.Name] ! null) { prop.SetValue(obj, Convert.ChangeType(row[prop.Name], prop.PropertyType)); } } return obj; } // 使用 DictionaryDict new Dictionary object(){ {Id, 1}, {Name, 张三}, {Age, 18} }; Student student ConvertRowToObject(studentDict);四、IO 流文件操作的核心C# 通过System.IO命名空间提供完整的文件操作 API核心分为路径操作、文件 / 目录操作、流操作三类1. 路径操作Path 类静态类用于处理路径字符串不影响物理文件string fullPath Path.GetFullPath(./test.txt); // 获取绝对路径 string fileName Path.GetFileName(D:/test.txt); // 获取文件名test.txt string extension Path.GetExtension(D:/test.txt); // 获取扩展名.txt string combinePath Path.Combine(D:/test, subdir, file.txt); // 拼接路径2. 文件 / 目录操作File/Directory 类静态类简化常用操作// 文件操作 string filePath ./test.txt; File.Create(filePath); // 创建文件 File.WriteAllText(filePath, Hello World); // 写入文本 string content File.ReadAllText(filePath); // 读取文本 File.Copy(filePath, ./test_copy.txt); // 复制文件 File.Delete(filePath); // 删除文件 // 目录操作 string dirPath ./testDir; Directory.CreateDirectory(dirPath); // 创建目录含上级目录 string[] files Directory.GetFiles(dirPath, *.txt, SearchOption.AllDirectories); // 查找文件 Directory.Delete(dirPath, true); // 删除目录含子目录和文件3. 流操作Stream 类针对大文件或二进制文件如图片、视频需使用流操作提升性能1字节流FileStream万能流// 读取文件 using (FileStream fs new FileStream(./test.txt, FileMode.Open, FileAccess.Read)) { byte[] buffer new byte[1024]; int readSize; while ((readSize fs.Read(buffer, 0, buffer.Length)) 0) { string content Encoding.UTF8.GetString(buffer, 0, readSize); Console.WriteLine(content); } } // 写入文件 using (FileStream fs new FileStream(./test.txt, FileMode.Append, FileAccess.Write)) { string content 追加内容; byte[] buffer Encoding.UTF8.GetBytes(content); fs.Write(buffer, 0, buffer.Length); }2字符流StreamReader/StreamWriter文本文件专用// 读取文本 using (StreamReader sr new StreamReader(./test.txt, Encoding.UTF8)) { string line; while ((line sr.ReadLine()) ! null) { Console.WriteLine(line); } } // 写入文本 using (StreamWriter sw new StreamWriter(./test.txt, true, Encoding.UTF8)) { sw.WriteLine(新行内容); }3缓冲流BufferedStream提升性能通过缓冲区减少 IO 次数推荐搭配 FileStream 使用using (FileStream fs new FileStream(./largeFile.dat, FileMode.Open)) using (BufferedStream bs new BufferedStream(fs, 4096)) // 4KB缓冲区 { // 读写操作... }五、委托函数式编程与事件驱动的基石委托是 C# 中 “方法作为参数传递” 的核心机制也是事件、回调函数的底层实现1. 委托的本质类型安全的函数指针派生自System.MulticastDelegate封装具有相同返回值和参数列表的方法支持绑定多个方法多播委托2. 委托的使用步骤// 1. 定义委托契约 public delegate int CalculateDelegate(int x, int y); // 2. 定义匹配的方法 public static int Add(int x, int y) x y; public static int Subtract(int x, int y) x - y; // 3. 绑定并执行委托 static void Main() { // 绑定静态方法 CalculateDelegate calc Add; calc Subtract; // 多播委托顺序执行 // 执行委托 int result calc(5, 3); // Add返回8Subtract返回2最终结果为2仅返回最后一个方法结果 // 匿名方法绑定 calc delegate(int a, int b) a * b; // Lambda表达式绑定推荐 calc (a, b) a / b; }3. 实战场景自定义集合 FindAll 方法// 定义条件委托 public delegate bool ConditionDelegate t); // 自定义数组FindAll工具类 public static class ArrayHelper { public static T[] FindAll(T[] arr, ConditionDelegate condition) { if(arr null || arr.Length 0) throw new ArgumentException(数组不能为空); List new List foreach(T item in arr) { if(condition(item)) result.Add(item); } return result.ToArray(); } } // 使用 int[] numbers {1,2,3,4,5,6}; int[] evenNumbers ArrayHelperbers, n n % 2 0); // 筛选偶数4. 委托的高级应用事件驱动WinForm/WPF 中的按钮点击事件EventHandler委托回调机制异步操作完成后的通知如BeginInvoke/EndInvoke函数式编程LINQ 中的Where、Select等方法底层依赖委托总结集合框架根据场景选择合适的集合List 用于动态数组、Dictionary 用于键值对、Stack/Queue 用于特定顺序需求;泛型优先使用泛型类 / 方法搭配约束确保类型安全减少重复代码;IO 流小文件用File/Directory静态方法大文件 / 二进制文件用FileStreamBufferedStream;委托简化回调逻辑实现代码解耦是理解 LINQ、事件的基础;这些知识点并非孤立存在例如泛型集合的高级方法如List.FindAll依赖委托IO 流的缓冲机制提升集合数据的读写性能。建议通过实战案例如文件数据导入字典、泛型工具类开发将这些技能串联起来形成完整的知识体系。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

做绒毛鉴定网站标准网站建设报价

音乐播放器插件系统:如何通过5个关键插件实现真正的个性化体验? 【免费下载链接】MusicFreePlugins MusicFree播放插件 项目地址: https://gitcode.com/gh_mirrors/mu/MusicFreePlugins 你是否曾经觉得自己的音乐播放器功能单一,无法满…

张小明 2025/12/30 9:20:10 网站建设

网站如何盈利流量费东莞建网站公司动

引言 在容器化环境中部署 WordPress 网站时,使用 Docker Compose 编排 Nginx、WordPress 和 MySQL 是一种常见且高效的实践。然而,由于涉及多层网络通信与协议转换,部署过程中往往面临一系列复杂的技术挑战。 本文基于一次实际部署与排障经历…

张小明 2025/12/30 9:19:34 网站建设

扬州电子商务网站建设wordpress电脑安装教程视频

ACDCAC变频移相,电力电子仿真,Matlab仿真 matlab/simulink模型 ~最近在实验室折腾ACDCAC变频移相系统的时候,突然发现Matlab/Simulink真是个好东西。这玩意儿虽然操作界面像极了二十年前的软件,但架不住它仿真电力电子是真方便啊。…

张小明 2025/12/30 9:19:00 网站建设

建设电子商务网站流程图2017年免费建网站

这款名为AppleRa1n的工具在iOS设备管理领域引起了广泛关注,它专门针对iOS 15至16.6版本的激活锁问题提供解决方案。作为一款基于Palera1n越狱工具修改而来的专业软件,它能够帮助用户在面对被锁定的iPhone设备时重新获得控制权。 【免费下载链接】applera…

张小明 2025/12/30 9:18:27 网站建设

有没类似建设通的免费网站百度竞价托管外包代运营

PaddlePaddle GPU云服务:低成本训练大模型的新选择 在智能应用日益普及的今天,越来越多的企业和开发者希望快速构建具备中文理解能力的AI系统——无论是识别发票上的手写文字、自动提取合同关键信息,还是为制造业质检部署视觉检测模型。但现…

张小明 2025/12/30 9:17:54 网站建设

企业做网站平台的好处wordpress jquery 插件

还在为Typora缺少某些特定功能而烦恼吗?想要打造完全符合个人工作流的专属编辑器吗?Typora插件开发正是你需要的解决方案!🚀 通过插件系统,你可以将Typora从一个优秀的Markdown编辑器,升级为满足所有个性化…

张小明 2025/12/31 12:25:18 网站建设