ReSharper提供1200多个快速修复,可以帮助您即时修复 C#、VB.NET、XAML、ASP.NET 和其他支持语言中检测到的大多数代码问题。 要应用快速修复,只需在高亮显示的代码问题上按Alt+Enter,然后选择最佳方法来修复问题或改进代码。
快速修复通常由红色(用于错误)或黄色(用于警告、建议和提示)灯泡表示,当您在高亮显示上设置脱字符号时,该灯泡出现在高亮显示的代码行的左侧。 您可以通过点击灯泡或按Alt+Enter来查看给定错误的可用快速修复列表。 然后只需从列表中选择适当的快速修复,问题将以最方便的方式得到解决。
一些快速修复(例如,Remove unused directives、Make field read-only和Remove redundant cast等)可以在更大的范围内自动查找和修复问题:在当前文件中、在当前项目中或在整个解决方案中。
您可以通过旁边显示的小箭头识别此类修复。 点击此箭头或按键盘上的向右箭头键可以选择应用修复的位置。
对于由未解析的符号引起的错误,ReSharper提供了许多不同的快速修复,例如:
在代码中创建新符号的快速修复通常是交互式的,就像在这个示例中,ReSharper通过将枚举强制提前到List<>
变量来帮助您修复IEnumerable
的多个枚举。
当ReSharper使用红框高亮显示必要的输入字段时,您可以接受建议值或进行修改,然后按Tab或Enter移动到下一个输入位置,或者按Shift+Tab移动到上一个输入位置。 完成最后一个输入字段后,您的脱字符号将返回正常模式。
ReSharper 还提供了上下文操作(在下拉列表中显示)和快速修复。
它们之间的区别十分明显:快速修复仅针对高亮显示的代码问题显示,旨在修复这些问题;上下文操作则表示始终在Alt+Enter下拉菜单中可用的小重构。
ReSharper 提供了 Structural Search 和 Structural Replace,用于查找与某个模式匹配的代码,并选择性地将其替换为与另一个模式匹配的代码。 更令人兴奋的是,ReSharper可以通过高亮显示与您的搜索模式匹配的代码来持续按照这些模式监控解决方案,并提供快速修复,根据您的替代模式替换代码。
多年来,使用String.Format
和其他支持复合格式化的方法是将C#变量值嵌入字符串字面量的唯一方法。 从C# 6.0开始,您可以使用字符串内插以可读性更强的方式执行此操作。 使用ReSharper的快速修复,只需按几次键即可用字符串内插替换复合格式化。
当ReSharper检测到对象上的方法调用可能为null,进而可能在运行时导致System.NullReferenceException
时,它会建议两个快速修复。 传统修复将在调用之前添加null检查例程。 不过,处理此调用的更简洁方法是使用null条件.?
运算符,C# 6.0中引入了此运算符来解决这种情况。
如果您喜欢C#中的LINQ语法,ReSharper将帮助您检查现有代码库中是否存在可以转换为LINQ表达式的循环,然后您可以使用快速修复快速安全地执行转换。
如果C#方法使用params
关键字获取可变数量的参数,则编译器将生成参数的数组,因此您不必在方法调用中为参数创建数组。
这里更有趣的是,ReSharper会建议可以移除所需范围内的所有冗余代码的快速修复,包括冗余限定符、参数、转换、条件检查、未使用的赋值和不可到达的代码,等等。
如果重载函数的唯一目的是使用某些参数的默认值调用“implementation”函数,则ReSharper将帮助您移除此重载并在“implementation”函数中使用可选参数。
按照设计,foreach
允许派生类型存在隐藏转换。 一方面,这使得它易于使用,但另一方面,这可能导致在运行时出现System.InvalidCastException
。 ReSharper在这里建议的快速修复可以帮助您将转换设为显式。 它仍然不安全,但至少它不再隐藏。
许多快速修复工具适用于多种语言。 下面是C#和VB.NET中提供的快速修复示例:为了明确两个字符串的比较方式,ReSharper建议用String.Equals()
替换相等运算符比较,这将处理大小写并确保这种比较具有文化意识。
TypeScript联合体类型有时可能很棘手。 例如,使用并非对联合体类型值中的所有类型都通用的成员会导致编译器错误。 在这种情况下,ReSharper建议使用一些快速修复来添加不同的类型防护,以便区分此类成员。
在JSON文件中,ReSharper使用它对链接的JSON架构中所有必要属性的了解来为缺失的必要属性建议快速修复。
CSS3及以下版本不允许采用十六进制颜色表示法的alpha通道。 因此,ReSharper建议您使用RGBA或HSLA颜色替换十六进制颜色,或者移除alpha通道值。