Visual Studio Code C 快速操作(Quick Actions)与重构完整指南

发布时间:2026/10/10 11:21:42
Visual Studio Code C 快速操作(Quick Actions)与重构完整指南 文档教程【免费下载链接】vscode-docsPublic documentation for Visual Studio Code项目地址https://gitcode.com/gh_mirrors/vs/vscode-docs点击查看免费下载本文是 Visual Studio Codevscode-docs 仓库 C# 重构文档中关于 C# 快速操作与重构能力的系统性技术指南。它面向使用 C# Dev Kit 扩展进行 .NET 开发的开发者完整覆盖代码生成Quick Fix、代码形态转换Convert 系列、提取/内联/封装以及代码排版等 50 余项重构能力。读完本文你将掌握灯泡图标、Quick Fix 与 Refactor 命令的触发方式以及每一项重构的适用场景与操作步骤能够像使用 Visual Studio 一样在 VS Code 中高效重构 C# 代码。认识 Quick Actions 与重构入口与触发方式C# Dev Kit 基于 Roslyn 语言服务为 VS Code 提供了大量重构与快速修复能力。在 C# 语言文档 中可以看到打开任意 C# 文件时编辑器会通过“灯泡”图标light bulb向你提示可用的修复与重构建议。触发方式共有三种点击灯泡图标当光标位于可重构或可修复的代码位置时编辑器左侧或行内会出现灯泡图标点击即可打开Quick Actions and Refactorings快速操作与重构菜单。使用 Quick Fix 命令按下editor.action.quickFix快捷键在 默认快捷键参考 中可查到其默认绑定通常为Ctrl.Windows/Linux或Cmd.macOS即可显示完整的快速修复与重构选项列表。使用右键菜单 Refactor在编辑器中右键并选择Refactor对应editor.action.refactor命令此时只显示重构类选项不包含错误修复类建议适合在无编译错误的场景下快速重构。两种命令的取舍Quick Fix 同时展示“修复错误”和“重构”两类条目而 Refactor 仅展示重构条目。当你只是想优化代码结构如把for改成foreach而不是处理编译错误时使用右键Refactor可以避免被无关的修复建议干扰。代码生成类快速操作Quick Fixes这类操作解决“代码写了一半”或“复制粘贴后缺东西”的问题属于典型的高频生产力工具。Add await作用为函数调用补上await关键字。适用场景在异步方法async方法内调用了一个返回Task的函数但漏写了await该调用处通常会被编译器以下划线标红提示。操作步骤将光标放在函数调用处通常会被标红。按下editor.action.quickFix打开Quick Actions and Refactorings菜单。选择Addawait。Add constructor parameters from members从成员生成构造函数参数作用根据选中的类成员自动生成带对应参数的新构造函数。适用场景你需要为一个类新增构造函数并希望参数列表与已有字段/属性一一对应由工具自动生成而不是手写。为什么有用手动声明构造函数需要逐个核对成员类型与名称而此功能基于成员列表一键生成杜绝拼写与类型错误。操作步骤选中要作为构造函数参数的类成员可多选。按下editor.action.quickFix打开快速操作菜单。选择Generate constructor 类名(成员类型, 成员类型, …)。Add DebuggerDisplay attribute添加 DebuggerDisplay 特性作用为类型、委托、属性或字段添加DebuggerDisplay特性控制对象在调试器变量窗口中的显示方式。适用场景你希望在调试时“钉住”pin某些属性让它们在调试器的数据提示Data Tips中置顶显示从而快速按属性检查对象。为什么有用钉住属性可以把关键信息提升到对象属性列表顶部省去逐层展开对象的时间。操作步骤将光标放在类型、委托、属性或字段上。按下editor.action.quickFix打开快速操作菜单选择AddDebuggerDisplayattribute。编辑器会自动添加DebuggerDisplay特性并附带一个返回默认ToString()结果的自动方法。Add explicit cast添加显式强制转换作用根据使用上下文自动为表达式添加显式强制转换cast。适用场景表达式的实际类型与目标类型不匹配需要强制转换才能正确赋值但你不确定该写在哪里。操作步骤将光标放在报错处。按下editor.action.quickFix打开快速操作菜单。选择Add explicit cast。Add file header添加文件头作用基于 EditorConfig 规则为现有文件、项目或解决方案批量添加文件头注释。适用场景团队出于版权要求规定每个源文件顶部必须包含版权声明等文件头。操作步骤若项目/解决方案中还没有.editorconfig文件先添加一个VS Code 中可使用 EditorConfig 扩展辅助维护。在.editorconfig文件中加入规则file_header_template。将该规则的值设为你希望应用的文件头文本可使用{fileName}占位符代表文件名。将光标放在任意 C# 文件的第一行。按下editor.action.quickFix打开快速操作菜单。选择Add file header。该能力与仓库中的 C# 格式化与 Linting 文档 相呼应——C# Dev Kit 完整支持 EditorConfig 来统一定制项目级代码风格。Add missing usings / imports补全缺失的 using / 导入作用为复制粘贴进来的代码立即补上缺失的using指令或项目引用。适用场景把代码从项目其他地方或其他源复制到新文件时往往会丢掉必要的using指令而产生编译错误此 Quick Fix 不仅能补using还能跨项目添加项目到项目的引用。为什么有用无需手动回忆并逐个输入所需的using指令。操作步骤复制代码到新文件但故意不包含using指令编译器报错的同时会附带一个代码修复。按下editor.action.quickFix打开快速操作菜单。选择Using 你的引用来添加缺失的引用。Add named argument添加命名实参作用为函数调用中的某个参数位置自动补上参数名变成命名实参named argument。适用场景方法参数很多阅读调用处时难以分辨每个值对应哪个参数使用命名实参可显著提升可读性。操作步骤将光标放在函数调用中的某个实参上。按下editor.action.quickFix打开快速操作菜单。选择Add argument name 参数名。Generate comparison operators生成比较运算符作用为实现了IComparable的类型自动生成比较运算符、、、、、!等。适用场景你的类型实现了IComparable希望编译器依据排序语义补全全部比较运算符。为什么有用对于值类型struct重写Equals可以获得比ValueType默认实现更高的性能而比较运算符组是一套配套代码手动书写繁琐且易错。操作步骤将光标放在类内部或IComparable关键字上。按下editor.action.quickFix打开快速操作菜单。从下拉菜单中选择Generate comparison operators。Generate default constructors生成默认构造函数作用为一个类立即生成默认构造函数无参构造函数的代码。适用场景新增了默认构造函数的声明需求希望由工具自动补齐方法体。操作步骤将光标放在类名上。按下editor.action.quickFix打开快速操作菜单。选择Generate constructor 类名()。Generate parameter生成参数作用在方法中引用了一个当前上下文不存在的变量并报错时可通过代码修复自动生成方法参数。为什么有用无需离开当前编辑位置即可快速修改方法签名保持编码上下文连贯。操作步骤将光标放在报错的变量名上。按下editor.action.quickFix打开快速操作菜单。选择Generate parameter。Implement all members explicitly / implicitly显式/隐式实现接口成员显式实现explicit将接口成员定义为类中只能通过该接口访问的成员适用于不希望同一个实现被多个接口混用调用时两个接口声明了同名但不同类型的成员如一个是属性、一个是方法时用显式实现消除歧义。操作步骤将光标放在类中正在实现的接口上 → 按下editor.action.quickFix→ 选择Implement all members explicitly。隐式实现implicit将接口的方法与属性直接作为类的公共成员添加。操作步骤光标放在接口上 → 按下editor.action.quickFix→ 选择Implement interface。Convert 系列代码形态转换重构这一组重构解决“代码形态不符合当前需求”的问题全部保持语义等价只是改变书写形态。Convert anonymous type to class匿名类型 → 类作用把匿名类型var初始化提升为具名类。适用场景匿名类型适合局部使用当代码规模增长、需要在多处复用时将其提升为类更合理。操作步骤将光标放在匿名类型var上。按下editor.action.quickFix打开快速操作菜单。选择Convert to class。Convert between auto property and full property自动属性 ↔ 完整属性作用在自动实现属性public int X { get; set; }与带私有字段和完整 getter/setter 的完整属性之间互转。适用场景属性的逻辑发生了变化——例如自动属性需要加入校验逻辑时转成完整属性完整属性逻辑不再需要时转回自动属性。操作步骤光标放在属性名上 → 按下editor.action.quickFix→ 二选一Convert to full property转为完整属性Use auto property使用自动属性Convert between direct cast andasexpression直接转换 ↔as表达式作用在直接强制转换(Type)obj与尝试转换obj as Type之间互转。适用场景当你预期转换在某些场景下会失败时用as当预期转换绝不会失败时用直接转换。操作步骤光标放在变量上 → 按下editor.action.quickFix→ 二选一Change to cast改为直接转换Change toasexpression改为 as 表达式Convert between for loop and foreach statementfor↔foreach作用在for循环与foreach语句之间互转。适用场景从for转foreach的理由循环内不使用局部循环变量只把它当作访问元素的索引希望简化代码降低初始化、条件和迭代三部分写错逻辑的概率。从foreach转for的理由循环内需要使用局部循环变量做更多事情而不只是访问元素正在遍历多维数组希望对数组元素有更多控制。操作步骤光标放在foreach或for关键字上 → 按下editor.action.quickFix→ 二选一Convert toforConvert toforeachConvert between Get method and propertyGet 方法 ↔ 属性Convert Get method to property将不含逻辑的 Get 方法转换为属性可选地连同 Set 方法一起转换。操作步骤光标放在 Get 方法名上 → 按下editor.action.quickFix→ 若存在 Set 方法可一并转换选择Replace Get 或 Set 方法名 with property。Convert property to Get method将属性转换为 Get 方法。适用场景属性涉及的不只是立即读写一个值而是包含更多逻辑。操作步骤光标放在方法名处 → 按下editor.action.quickFix→ 选择Replace 属性名 with method。Convert between if and switch statementsif↔switch作用在if语句、switch语句以及 C# 8.0 引入的switch表达式之间互转。适用场景希望把一组if-else条件改写为更集中的switch形态或反过来把switch拆回if。操作步骤光标放在if关键字上 → 按下editor.action.quickFix→ 三选一Convert toswitchstatementConvert toswitchexpressionConvert toifstatementConvert between regular string and verbatim string普通字符串 ↔ verbatim 字符串作用在普通字符串字面量与 verbatim 字符串字面量...之间互转。适用场景verbatim 字符串转普通字符串可以节省书写空间普通字符串转 verbatim 字符串可以提高可读性例如路径字符串无需转义反斜杠。操作步骤光标放在字符串字面量上 → 按下editor.action.quickFix→ 二选一Convert to regular string转为普通字符串Convert to verbatim string转为 verbatim 字符串Convert class to record类 → record作用把类快速转换为 C# record。适用场景类当前主要用于存储数据且需要值相等语义与不可变性而 record 正是为此设计的。操作步骤光标放在类名上 → 按下editor.action.quickFix→ 选择Convert to positional record。转换前before与转换后after对比Convert local function to method局部函数 → 方法作用把局部函数提升为方法。适用场景局部函数需要在当前局部上下文之外被调用或局部函数体过长、独立成方法后代码更易读。操作步骤光标放在局部函数中 → 按下editor.action.quickFix→ 选择Convert to method。Convert numeric literal to hex, decimal, or binary数字字面量进制转换作用在十六进制、十进制、二进制数字字面量之间自动转换无需手动换算。操作步骤光标放在数字字面量上 → 按下editor.action.quickFix→ 三选一Convert to decimalConvert to hexConvert to binaryConvert placeholder to interpolated stringString.Format占位符 → 插值字符串作用把String.Format的格式化结果串占位符转换为插值字符串。为什么有用插值字符串比String.Format可读性更好且可以直接访问变量名。操作步骤光标放在String.Format的占位符上 → 按下editor.action.quickFix→ 选择Convert to interpolated string。Convert regular string to interpolated string普通字符串 → 插值字符串作用把普通字符串转换为插值字符串$...。适用场景希望清理代码、让拼接逻辑更易读。操作步骤光标放在待转换的字符串上 → 按下editor.action.quickFix→ 选择Convert to interpolated string。转换前后对比Convert tuple to struct元组 → struct作用把元组转换为struct并可按作用范围选择更新哪些使用点。适用场景需要固定形状、可被多处重复访问的数据结构时把临时元组提升为具名struct。操作步骤光标放在元组上 → 按下editor.action.quickFix→ 按更新范围四选一Convert tostruct- updating usages in containing member仅更新所在成员内的使用点Convert tostruct- updating usages in containing type更新所在类型内的使用点Convert tostruct- updating usages in containing project更新所在项目内的使用点Convert tostruct- updating usages in dependent projects更新依赖项目中的使用点Use recursive patterns使用递归模式作用把代码块转换为递归模式recursive patterns写法适用于switch语句、属性模式匹配、元组模式匹配与位置模式匹配。适用场景使用递归模式让代码更简洁、可读。操作步骤光标放在待转换的表达式上 → 按下editor.action.quickFix→ 二选一Convertswitchstatement to expression把 switch 语句转为表达式Use recursive patterns使用递归模式转换前后对比提取、内联与封装类重构Encapsulate field封装字段作用把字段转为属性并更新该字段的所有使用点为新属性。适用场景希望把字段迁移为属性让其他类通过属性间接访问从而在赋值时加入校验等逻辑。操作步骤光标放在待封装字段名内部 → 按下editor.action.quickFix→ 二选一Encapsulate field: 字段名 (and use property)封装字段并在后续代码中使用属性Encapsulate field: 字段名 (but still use field)封装字段但内部仍使用字段Inline method内联方法作用把静态方法、实例方法或扩展方法的调用点替换为方法体内容单语句方法体并可选删除原方法声明。为什么有用方法体很短时内联后语法更清晰。操作步骤光标放在方法调用处 → 按下editor.action.quickFix→ 二选一Inline 限定方法名内联并移除原方法声明Inline and keep 限定方法名内联但保留原方法声明Inline temporary variable内联临时变量作用删除临时变量用其值直接替换使用处。适用场景临时变量的存在反而让代码更难理解。操作步骤光标放在待内联的临时变量内部 → 按下editor.action.quickFix→ 选择Inline temporary variable。Introduce local variable for expression为表达式引入局部变量作用为已有表达式立即生成局部变量。适用场景表达式在后续多处会被复用——与其复制粘贴多次不如计算一次存入局部变量再使用。操作步骤光标放在待赋给新局部变量的表达式上 → 按下editor.action.quickFix→ 二选一Introduce local - Introduce local for 表达式仅为当前这一处引入Introduce local - Introduce local for all occurrences of 表达式为所有出现处统一引入Introduce parameter引入参数作用把已有表达式立即提升为新参数。适用场景表达式后续会在多处复用且更适合通过参数传入。操作步骤光标放在待提升为参数的表达式上 → 按下editor.action.quickFix→ 三选一Introduce parameter for 表达式 - and update call sites directly直接更新调用点Introduce parameter for 表达式 - into extracted method引入到抽取出的方法中Introduce parameter for 表达式 - into new overload引入到新的重载中Introduce using statement引入 using 语句作用为IDisposable实例添加using语句/代码块确保资源正确获取、使用与释放。操作步骤光标放在表达式上 → 按下editor.action.quickFix→ 选择Introduceusingstatement。条件逻辑与循环控制流重构Invert conditional expressions and logical operations反转条件表达式与逻辑运算作用反转条件表达式或将条件与||运算互相替换。为什么有用手写反转容易出错且耗时此代码修复可自动完成且保持语义等价。操作步骤光标放在条件表达式或/||运算符上 → 按下editor.action.quickFix→ 选择Invert conditional或Replacewith||。Invert if反转 if 语句作用在不改变代码语义的前提下反转if/if else语句。适用场景某个if/if else反着写更好理解例如把主要路径放到前面、提前返回。操作步骤光标放在if/if else语句中 → 按下editor.action.quickFix→ 选择Invertif。Reverse for statement反转 for 语句作用反转for语句的迭代方向从正向遍历改为反向遍历。操作步骤光标放在for语句中 → 按下editor.action.quickFix→ 选择Reverseforstatement。Split or merge if statements拆分或合并 if 语句拆分把使用或||运算符的if拆成嵌套if合并把内层if与外层if合并。属于风格偏好类重构。拆分操作步骤光标放在if中的或||运算符旁 → 按下editor.action.quickFix→ 选择Split into nestedifstatements。合并操作步骤光标放在内层if关键字上 → 按下editor.action.quickFix→ 选择Merge with nestedifstatement。声明与可读性重构Make member static成员改为静态作用把非静态成员改为静态成员。为什么有用静态成员提升可读性——明确某段代码是隔离的更易理解、重读与复用。操作步骤光标放在成员名上 → 按下editor.action.quickFix→ 选择Make static。Move declaration near reference声明移到引用附近作用把变量声明移到离使用处更近、作用域更窄的位置。为什么有用窄化作用域可以避免可读性问题和信息暴露information hiding。操作步骤光标放在变量声明处 → 按下editor.action.quickFix→ 选择Move declaration near reference。Move type to matching file类型移到同名文件作用把选中的类型移到与其同名的新.cs文件。适用场景一个文件里定义了多个类、结构体、接口等希望按“一类型一文件”整理。操作步骤光标放在类型定义处的类型名内部 → 按下editor.action.quickFix→ 选择Move type to 类型名.cs。Use explicit type / Use implicit type显式类型 ↔varUse explicit type把局部变量声明中的var替换为显式类型。适用于希望提升可读性或在声明时不初始化变量的场景。需要说明的是当变量用匿名类型初始化且之后要访问其属性时var是必须的。操作步骤光标放在var关键字上 → 按下editor.action.quickFix→ 选择Use explicit type instead ofvar。Use implicit type把局部变量声明中的显式类型替换为var。适用于符合个人编码约定、希望显示更少代码的场景。同样匿名类型初始化场景下var不可省略。操作步骤光标放在显式类型关键字上 → 按下editor.action.quickFix→ 选择Use implicit type。Use lambda expression or block bodylambda 表达式体 ↔ 块体作用在 lambda 的表达式体expression body与块体block body之间互转。操作步骤光标放在 lambda 运算符右侧 → 按下editor.action.quickFix→ 二选一Use block body for lambda expressions使用块体Use expression body for lambda expressions使用表达式体换行、缩进与对齐重构这类重构针对“单行过长”问题让长表达式按你的偏好自动排版适合团队对代码行宽有严格约定的场景。Wrap and align call chains换行并对齐调用链作用把一个语句中由多个方法调用组成的长链式调用按偏好换行/对齐。操作步骤光标放在任一调用链上 → 按下editor.action.quickFix→ 选择Wrap call chain或Wrap and align call chain。Wrap, indent, and align parameters or arguments参数/实参换行、缩进与对齐作用对包含多个参数/实参的方法声明或调用进行换行、缩进与对齐。操作步骤光标放在参数列表中 → 按下editor.action.quickFix→ 三选一Wrap every parameter - Align wrapped parameters每个参数换行并对齐Wrap every parameter - Indent all parameters每个参数换行并整体缩进Wrap every parameter - Indent wrapped parameters每个参数换行并缩进换行的参数Wrap binary expressions换行二元表达式作用对二元表达式如多条件组合按偏好换行。操作步骤光标放在二元表达式中 → 按下editor.action.quickFix→ 选择Wrap expression。实用提示与配套资源1. 记住两种命令的分工editor.action.quickFixQuick Fix同时给出修复与重构建议右键菜单Refactoreditor.action.refactor只给重构建议。日常高频路径是把光标放到目标代码上直接按快捷键。2. 结合 EditorConfig 统一风格文件头模板file_header_template等重构依赖.editorconfig规则详见仓库中的 C# 格式化与 Linting 文档。3. 由浅入深的学习路径本文对应的完整官方文档位于仓库 docs/csharp/refactoring.mdC# 编辑能力总览可参考 C# 语言文档 中的 Quick Fixes / Suggestions 一节VS Code 对所有语言通用的重构机制见 编辑重构文档若尚未安装 C# Dev Kit可参考 C# 入门文档 完成环境搭建。4. 快捷键的可定制性editor.action.quickFix的默认绑定记录在仓库的 默认快捷键参考 中你完全可以通过键盘快捷方式面板将其调整为更顺手的组合键。掌握以上 50 余项 C# 重构与快速修复能力后你可以把日常编码中大量重复、易错的代码形态调整交给 Roslyn 驱动的编辑器自动完成把精力集中在真正需要思考的逻辑设计上。赞分享文档教程【免费下载链接】vscode-docsPublic documentation for Visual Studio Code项目地址https://gitcode.com/gh_mirrors/vs/vscode-docs点击查看免费下载相关推荐Visual Studio Code 中使用 CMake Tools 快速创建 C Hello World 项目CMake Quick Start 完整指南Visual Studio Code 中使用 CMake Tools 快速创建 C Hello World 项目CMake Quick Start 完整指文档教程VS Code 中的 TypeScript 重构完全指南内置重构、Quick Fixes 与 Code Actions 配置VS Code 中的 TypeScript 重构完全指南内置重构、Quick Fixes 与 Code Actions 配置 重构Refactoring是文档教程大麦自动抢票3 步配置脚本开票瞬间替你按下提交大麦自动抢票3 步配置脚本开票瞬间替你按下提交 开票前 3 秒你狂点刷新页面弹出「已售罄」。手速再快也跑不过服务器端毫秒级的库存扣减这是手动抢票绕不开的文档教程上一篇safer_ffi 项目使用指南下一篇FFmpeg实战宝典Awesome Video教你高效处理视频文件的终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询