快速修复示例
快速修复适用于多种情况,范围过大无法一一列举。 ReSharper 在所有支持的语言中共提供了超过 1200 种快速修复。 这里我们将通过一些精选的场景展示如何使用它们:
类型不匹配
每当表达式的类型无法隐式转换为表达式上下文中适用的类型时,ReSharper 会检测到此错误并在编辑器中高亮显示。 将插入符号放在高亮错误处并按下 Alt+Enter 后,您可以从以下列表中选择一个快速修复:

应用建议的快速修复后的效果在下表中说明。
快速修复 | 效果 |
|---|---|
强制转换为 | |
安全强制转换为 | |
将 | |
将 | |
调用 |
未定义变量
每当 ReSharper 检测到代码中存在未定义变量时,错误会被高亮显示。 将插入符号放在高亮错误处并按下 Alt+Enter 后,您将看到以下快速修复列表:

应用建议的快速修复后的效果在下表中说明。
快速修复 | 效果 |
|---|---|
创建局部变量 | 创建了一个新的局部变量 |
在包含方法中创建参数 | 在方法签名中添加了一个新参数: ![]() |
创建其他 | 打开一个子菜单,您可以选择在相应的类中创建字段或属性。 例如,如果您选择创建字段,则会在当前类中创建一个新的私有字段 ![]() |
更改所有 | 如果您选择 更改所有 ,将显示以下建议: ![]() 只需输入一次新名称;ReSharper 会更改未定义变量的所有其他出现位置: |
未定义方法调用
每当 ReSharper 检测到代码中调用了未定义的方法时,错误会被高亮显示。 将插入符号放在高亮错误处并按下 Alt+Enter 后,ReSharper 会显示以下快速修复列表:

应用快速修复后,代码会被修改,如下表所示:
快速修复 | 效果 |
|---|---|
创建方法 | 此快速修复声明了一个新方法,其签名来源于方法调用,方便了偏好自顶向下编程的开发者。 在我们的示例中,ReSharper 创建了以下声明,并正确推测了返回类型: ![]() ReSharper 还会为新方法的参数建议适用的类型和名称: ![]() |
创建其他 | 此子菜单包括涉及创建辅助代码的其他快速修复。 例如:
|
更改所有 | 类似于 未定义变量 的相应快速修复,此快速修复允许您快速替换符号 |
遗忘的方法返回
如果一个方法需要返回值,但您忘记提供 return 语句,ReSharper 会通过高亮显示有问题方法的结束括号来提醒您。 将插入符号放在高亮错误处并按下 Alt+Enter 后,您将看到以下快速修复列表:

快速修复 | 效果 |
|---|---|
添加返回语句 | 应用快速修复后,ReSharper 会添加一个返回 |
使方法返回 void | 应用快速修复后,ReSharper 会将方法的初始返回类型替换为 |
缺少 Using 指令
每当代码中有一个类型名称无法解析,因为您忘记在文件中编写相应的 using 指令时,会弹出一个小窗口建议导入该类型:

按下 Alt+Enter 后,将插入适当的 using 指令。 如果有多个名称匹配的类型,您将被要求选择您希望使用的类型(有关更多信息,请参阅 导入命名空间)。
If you chose not to import a required namespace when the popup was displayed, or if you disabled 在编辑器中显示“导入缺失引用”弹窗 on the page of ReSharper 选项 Alt+R, O , you can import a type at any time by placing the caret at the type, pressing Alt+Enter and choosing the corresponding quick-fix.

您可能希望某些类型或命名空间不被建议,例如,如果您的解决方案中有类似于系统类型的内容,例如 MyFramework.MyCollections.List ,但实际上并未使用它。 To exclude such items from the suggestions, add them to the 从导入和补全中排除 list on the page of ReSharper 选项
Alt+R, O
.
条目的格式为 Fully.Qualified.Name、 Fully.Qualified.Name.Prefix* 或 *Fully.Qualified.Name.Suffix。 泛型类型的指定格式为 List`1。
缺少 async 修饰符
如果您的方法包含 await 运算符,但未定义为异步,ReSharper 会检测到此不匹配并提供相应的快速修复来解决此问题。
在此之前: | ![]() |
应用快速修复: | ![]() |
在此之后: | ![]() |
将循环转换为 LINQ 表达式
通过 C# 3.0 和 LINQ,开发者可以更轻松地编写数据密集型代码,直接向编译器描述其意图。 ReSharper 检测到可以使用 LINQ 语法重写的代码,并提供自动执行转换的选项:
在此之前: | ![]() |
应用快速修复: | ![]() |
在此之后: | ![]() |
迁移到方法参数和返回值中的 IEnumerable
ReSharper 扫描您的代码库,以检测可以安全返回和接受 IEnumerable 而不是更具体类型(如 Array、 List 或 ArrayList )的方法:
在此之前: | ![]() |
应用快速修复: | ![]() |
在此之后: | ![]() |
将赋值语句转换为对象初始化器
ReSharper 提供了上下文操作和快速修复,将赋值语句转换为对象初始化器。 上下文操作允许您逐个将字段赋值添加到初始化器,而快速修复则一次性添加所有字段赋值。 以下是快速修复的工作方式:
在此之前: | ![]() |
应用快速修复: | ![]() |
在此之后: |
|
将静态方法调用转换为扩展方法调用
当您以传统 C# 静态方法的方式调用扩展方法时,ReSharper 帮助您快速遵循标准的扩展方法调用实践:
在此之前: | |
应用快速修复: | ![]() |
在此之后: |
将匿名方法转换为 lambda 表达式
ReSharper 建议将匿名方法转换为 lambda 表达式。 反向功能作为上下文操作提供。
在此之前: |
|
应用快速修复: | ![]() |
在此之后: |
|
转换为自动属性
ReSharper 使传统的基于私有字段的属性快速转换为 C# 3.0 中实现的自动属性。 更多信息请参阅 使用自动属性。
在此之前: | ![]() |
应用快速修复: | ![]() |
在此之后: |
|
使类型参数不变
当类型参数的使用违反其变体时,ReSharper 建议将参数设为不变:
在此之前: | ![]() |
应用快速修复: | ![]() |
在此之后: | ![]() |






























