using关键字 首先是using关键字using关键字的作用是对IDisposable资源作管理保证不会发生泄漏等问题。例如using (var stream new FileStream(, FileMode.Create)) { // do something }那么它又是怎么做的呢其实效果是这样的var stream new FileStream(, FileMode.Create); try { // do something } finally { if (stream ! null) { stream.Dispose(); } }看代码不说话。我想了解一下您是喜欢直接写第二段代码还是写using代码呢foreach关键字foreach关键字是配合IEnumerable作遍历时使用的比如这样的代码foreach (var i in source) { Console.WriteLine(i); }其实等价于using (var etor source.GetEnumerator()) { while (etor.MoveNext()) { Console.WriteLine(etor.Current); } }咦看上去并不复杂啊只是多了一级缩进而已。不过您注意到没有这里居然用到了“臃肿”的using关键字所以说这里的代码理应是这样写的var etor source.GetEnumerator(); try { while (etor.MoveNext()) { Console.WriteLine(etor.Current); } } finally { if (etor ! null) { etor.Dispose(); } }看代码不说话。我想了解一下您是喜欢直接写第二段代码还是写foreach代码呢如果有两层foreach嵌套呢评价firelong同学在文章中提到用语言支持模式是一个设计上的错误模式应该通过框架或类库来支持。这点我保留看法因为在我看来模式一定程度上是为了弥补语言特性不足而设计的。因此面向对象语言有面向对象语言的模式如著名的GoF23函数式编程也有函数式编程的模式例如monad应该可以算吧。在C#PythonRuby里很少谈工厂方法模式为什么因为它们可以将函数作为方法的参数进行传递不需要创建一个抽象类以及多个实现。同样的策略模式等等也是一样。因此如果一个语言特性简化模式的使用且这个模式非常常用如using和foreach那么这个语言特性很有价值。firelong同学在文章中回复到“如果使用这种思路那么Visitor模式Adaptor模式等等难道也要加进来吗”我觉得不能这样考虑问题这有点类似“常见逻辑谬误”里的“滑坡谬误”比如这种说法动物实验有损对生命的尊重。如果不尊重生命即可能越来越容忍诸如战争及杀人等等暴力行为。那么社会将很快就会沦为战场人人都会时刻担忧自己的生命。这将是文明的末日。为了防止出现这种可怕结果应当立即宣布动物实验为非法。类比一下添加支持模式的语法有损语言的紧凑性。如果不考虑紧凑性即可能越来越容忍诸如支持Visitor模式等等愚蠢行为。那么语言很快就会沦为垃圾场人人都会时刻担忧自己的代码。这将是程序的末日。为了防止出现这种可怕后果应该立即废除对模式的语法支持。其实每一个语法增加都是要权衡利弊的例如using和foreach的确会大大简化开发于是我很欢迎这个语法功能而且如Iterator模式的确是非常常用的。这点看一下您代码中有多少foreach便知道了——当然有了LINQ之后foreach用的很少但是我很担心firelong同学是否会支持LINQ所基于的多种语法特性。还有一方面便是能否在语法上支持Visitor等模式我没有想明白该怎么设计这个语法。我同样想不明白的是firelong同学说的用框架类库来支持模式就拿foreach和using来说该怎么做才能像现在这样优雅呢其实foreach等功能都是现代语言的“标配”PythonRuby连Java都有支持Iterator的语法如Python等还有如yield等Iterator生成器而且在Java 7里也已经加入像C#里using这样的自动资源管理Automatic Resource ManagementARM功能所以其实我不是很理解firelong所说的用框架类库支持模式才是“正途”。我希望firelong同学能够补充更多理由。至于yield和事件的设计我将会在自己的博客上讨论因为这不是三句两句话能写清楚地内容。其他好吧我要说一些其他内容了因为光说这些内容显得不够地道而在一篇技术文章最后谈谈可能大家更容易容忍一些。我实在不是很清楚为什么firelong同学要针对我做反面例子这次我在回复“Iterator实在太常见了而且yield的帮助无穷大”又被说成是“拿着一个new feature 抚摸来抚摸去的新cool程序员”。以前的文章说的更难听都说我败坏社区风气骗取眼球他见不得.NET社区这样沉沦下去决定写博呐喊。没错我是喜欢语言但是您如果仔细看我的文章就会发现我讨论的究竟是什么。我讨论的东西不是简单的语法功能而是编程理念。我比较C#和Java也是提到编程理念。我不断强调我不会关注最普通的语法特性而是考虑到引入语法以后是否对编程思路有重要改进。我也不光在乎C#语法我接触很多语言要说我“拿个新Feature抚摸来抚摸去”您看到我在反复强调C# 4.0的新特性吗firelong同学很注重性能于是不知怎么就说我不重视性能了。事实上性能相关的东西我写过很多例如《重谈字符串连接性能》系列《数组排序方法的性能比较》系列《并发环境下的缓存容器性能优化》系列《代码执行效率》系列还有“基础性能相关”文章如《计算机体系结构和程序性能》等等累计几十篇。我不是不重视性能相反我觉得我都在把性能相关的各个方面已经谈遍了。谈了很多事实上我还一直在考虑该从哪个角度入手继续讨论只是没有好的题材而已。而且我强调的最多的还是基础我不断强调算法和数据结构还有一些如操作系统等基础课程这从《老赵书托》里便可以得知。在谈每一块时我都希望尽可能客观、正确、完整。这方面我谈的比任何人少过吗当然我的确没有天天强调性能我觉得没有必要可能这也和我没有在这方面性能问题上栽过跟头的缘故。

相关新闻

最新新闻

AI Agent工具调用安全:Pyshackle执行前门禁实践

AI Agent工具调用安全:Pyshackle执行前门禁实践

在 AI Agent 应用里,工具调用(tool call)是连接大模型能力和真实世界的桥梁。Agent 决定调用哪个工具、填入什么参数,执行器再做删除文件、发送邮件、查询数据库等真实操作。这个机制非常实用,但也把安全边界放到了很不…

2026/8/28 0:19:04
InfluxDB→KaiwuDB时序数据模型设计改造

InfluxDB→KaiwuDB时序数据模型设计改造

文章目录每日一句正能量一、前言:模型改造是迁移的核心二、模型差异分析2.1 InfluxDB模型特点2.2 KaiwuDB模型特点2.3 模型对比三、表结构设计3.1 单表设计3.2 多表设计3.3 分区表设计四、标签设计优化4.1 主标签设计4.2 普通标签设计4.3 字段列设计五、模型改造实战…

2026/8/28 0:19:04
Uber开源AI编码助手安全监控:从数据采集到事件闭环的落地实践

Uber开源AI编码助手安全监控:从数据采集到事件闭环的落地实践

Uber开源了一个针对Claude Code、Cursor和Codex的安全监控方案。这个方向非常实际:现在很多公司都在批量引入AI编程助手,模型代码写得好不好反而不是安全团队最操心的,最担心的是内部代码、密钥、客户数据会不会在开发过程中,被ID…

2026/8/28 0:19:04
AI编程助手库安全指南:为Agent建立可执行的依赖使用规则

AI编程助手库安全指南:为Agent建立可执行的依赖使用规则

很多开发者在用 AI 编程助手时都遇到过这样的场景:让 Agent 修一个 bug,它唰唰唰改完代码,顺手给你 pip install 了一个新依赖;或者你在提示词里让它“用最流行的方案实现”,结果它挑了一个三年没维护、CVE 一堆的库…

2026/8/28 0:19:03
AI应用链接访问控制:RequestGuard部署与接入指南

AI应用链接访问控制:RequestGuard部署与接入指南

最近在 Hacker News 上看到一个很有意思的项目:RequestGuard。它解决的问题非常具体:当 AI 应用拿到用户发来的链接时,能不能阻止它自动去访问这些链接?这个问题在 AI 应用工程里非常常见。很多 LLM Agent、AI 助手、RPA 工具在处…

2026/8/28 0:19:03
大语言模型辅助代码工程的检查清单

大语言模型辅助代码工程的检查清单

大语言模型辅助代码工程的检查清单大语言模型可以生成候选实现、解释错误和协助重构,但生成速度不等于变更可靠。将其视为结对工具,能减少隐蔽风险。 修改前核对范围 明确允许修改的文件、接口兼容要求和不可触及配置。先说明拟改调用链与假设&#xff1…

2026/8/28 0:14:03