快速修复

ReSharper提供1200多个快速修复,可以帮助您即时修复C#、VB.NET、XAML、ASP.NET、JavaScript、TypeScript和其他支持语言中检测到的大多数代码问题。 要应用快速修复,只需在高亮显示的代码问题上按Alt+Enter,然后选择最佳方法来修复问题或改进代码。

ReSharper中针对代码问题的快速修复

应用快速修复

快速修复通常由红色(用于错误)或黄色(用于警告、建议和提示)灯泡表示,当您在高亮显示上设置脱字符号时,该灯泡出现在高亮显示的代码行的左侧。 您可以通过点击灯泡或按Alt+Enter来查看给定错误的可用快速修复列表。 然后只需从列表中选择适当的快速修复,问题将以最方便的方式得到解决。

在更广泛的范围内应用ReSharper快速修复(文件、项目或解决方案)

修复范围

一些快速修复(例如,Remove unused directivesMake field read-onlyRemove redundant cast等)可以在更大的范围内自动查找和修复问题:在当前文件中、在当前项目中或在整个解决方案中。

您可以通过旁边显示的小箭头识别此类修复。 点击此箭头或按键盘上的向右箭头键可以选择应用修复的位置。

ReSharper针对未解析符号的快速修复

修复未解析的符号

对于由未解析的符号引起的错误,ReSharper提供了许多不同的快速修复,例如:

  • 如果解决方案中任何位置引用的某个命名空间中存在符号,则 ReSharper 会显示一个弹出窗口,建议将所有缺失的命名空间导入文件。
  • 一组 Create… 快速修复将帮助您根据用法上下文快速生成符号的各种声明。
  • 修复问题的另一种方法是Find this type on nuget.org…。 它将调出 NuGet Browser,随后帮助您找到并安装缺失的 NuGet 程序包。
ReSharper中针对代码问题的快速修复

交互式快速修复

在代码中创建新符号的快速修复通常是交互式的,就像在这个示例中,ReSharper通过将枚举强制提前到List<>变量来帮助您修复IEnumerable的多个枚举。

当ReSharper使用红框高亮显示必要的输入字段时,您可以接受建议值或进行修改,然后按TabEnter移动到下一个输入位置,或者按Shift+Tab移动到上一个输入位置。 完成最后一个输入字段后,您的脱字符号将返回正常模式。

ReSharper快速修复与上下文操作

快速修复与上下文操作

ReSharper 还提供了上下文操作(在下拉列表中显示)和快速修复。

它们之间的区别十分明显:快速修复仅针对高亮显示的代码问题显示,旨在修复这些问题;上下文操作则表示始终在Alt+Enter下拉菜单中可用的小重构。

高亮显示与某个搜索模式匹配的代码并使用替代模式替换

您的自定义快速修复

ReSharper 提供了结构化搜索和替换,用于查找与某个模式匹配的代码,并选择性地将其替换为与另一个模式匹配的代码。 更令人兴奋的是,ReSharper可以通过高亮显示与您的搜索模式匹配的代码来持续按照这些模式监控解决方案,并提供快速修复,根据您的替代模式替换代码。

ReSharper中针对代码问题的快速修复

C#:使用字符串内插示例

多年来,使用String.Format和其他支持复合格式化的方法是将C#变量值嵌入字符串文字的唯一方法。 从C# 6.0开始,您可以使用字符串内插以可读性更强的方式执行此操作。 使用ReSharper的快速修复,只需按几次键即可用字符串内插替换复合格式化。

ReSharper中针对代码问题的快速修复

C#:修复可能的NullReferenceException示例

当ReSharper检测到对象上的方法调用可能为null,进而可能在运行时导致System.NullReferenceException时,它会建议两个快速修复。 传统修复将在调用之前添加null检查例程。 不过,处理此调用的更简洁方法是使用null条件.?运算符,C# 6.0中引入了此运算符来解决这种情况。

ReSharper中针对代码问题的快速修复

C#:将foreach转换为LINQ表达式示例

如果您喜欢C#中的LINQ语法,ReSharper将帮助您检查现有代码库中是否存在可以转换为LINQ表达式的循环,然后您可以使用快速修复快速安全地执行转换。

ReSharper中针对代码问题的快速修复

C#:删除冗余数组创建示例

如果C#方法使用params关键字获取可变数量的参数,则编译器将生成参数的数组,因此您不必在方法调用中为参数创建数组。

这里更有趣的是,ReSharper会建议可以移除所需范围内的所有冗余代码的快速修复,包括冗余限定符、参数、转换、条件检查、未使用的赋值和无法访问的代码,等等。

ReSharper中针对代码问题的快速修复

C#:引入可选参数示例

如果重载函数的唯一目的是使用某些参数的默认值调用“implementation”函数,则ReSharper将帮助您移除此重载并在“implementation”函数中使用可选参数。

ReSharper中针对代码问题的快速修复

C#:在foreach循环内使用显式转换示例

按照设计,foreach允许派生类型存在隐藏转换。 一方面,这使得它易于使用,但另一方面,这可能导致在运行时出现System.InvalidCastException。 ReSharper在这里建议的快速修复可以帮助您将转换设为显式。 它仍然不安全,但至少它不再隐藏。

ReSharper中针对代码问题的快速修复

VB.NET:指定字符串比较示例

许多快速修复工具适用于多种语言。 下面是C#和VB.NET中提供的快速修复示例:为了明确两个字符串的比较方式,ReSharper建议用String.Equals()替换相等运算符比较,这将处理大小写并确保这种比较具有文化意识。

ReSharper中针对代码问题的快速修复

TypeScript:添加类型防护示例

TypeScript联合类型有时可能很棘手。 例如,使用并非对联合类型值中的所有类型都通用的成员会导致编译器错误。 在这种情况下,ReSharper建议使用一些快速修复来添加不同的类型防护,以便区分此类成员。

ReSharper中针对代码问题的快速修复

JSON:添加缺失的必要属性示例

在JSON文件中,ReSharper使用它对链接的JSON架构中所有必要属性的了解来为缺失的必要属性建议快速修复。

ReSharper中针对代码问题的快速修复

CSS:移除alpha组件示例

CSS3及以下版本不允许采用十六进制颜色表示法的alpha通道。 因此,ReSharper建议您使用RGBA或HSLA颜色替换十六进制颜色,或者移除alpha通道值。