ReSharper 2025.2 Help

代码分析和字符串字面量的辅助功能

在普通字符串中

以下是 ReSharper 在您处理代码中的普通字符串时可以为您提供的帮助:

  • 默认情况下,ReSharper 会高亮显示所有非逐字字符串中的正确和错误的转义序列:

    字符串中转义序列的高亮显示

  • 当您的光标位于字符串中时,按下 Alt+Enter 并选择相应的 上下文操作 ,您可以在普通字符串和逐字字符串之间进行转换。 这同样适用于插值字符串。

  • 您可以通过按下 输入 简单地 拆分字符串字面量

  • 如果字符串包含正则表达式,ReSharper 可以高亮显示其语法和错误,并在表达式中为您提供代码补全。 更多信息请参阅 正则表达式辅助功能

    同样,您可以让 ReSharper 分析字符串字面量中的 HTML。 要让 ReSharper 识别字符串字面量中的特定语言,您可以使用相应的 上下文操作 或在字符串字面量之前添加注释 /*language=regexp|jsregexp|html*/

  • 您可以选择字符串中的某些子字符串,并自动 为该子字符串引入变量

  • 如果您的项目是可本地化的,您可以自动 将字符串移动到资源中

在系统字符串格式化方法中

ReSharper 分析所有 .NET 字符串格式化方法的格式字符串和参数,例如 String.FormatText.StringBuilder.AppendFormatConsole.WriteLine

在字符串格式化方法的用法中,ReSharper 会高亮显示格式占位符,并在您的光标位于其中一个时同步高亮显示占位符和相应的参数:

高亮显示字符串格式化方法中的参数和占位符

如果参数和格式占位符不匹配(如果缺少参数会导致运行时的 FormatException ),ReSharper 会生成缺少或冗余参数的警告:

字符串格式化方法中缺少参数的警告

您可以通过在警告上按下 Alt+Enter 来轻松修复此问题。 ReSharper 将建议自动添加缺少的参数或删除不匹配的格式占位符。

ReSharper 还可以帮助您检测并删除嵌套在其他字符串格式化方法中的冗余字符串格式化方法调用。 例如:

对字符串格式化方法的冗余调用

要快速转换字符串字面量和变量的连接,请在连接中的任意位置按下 Alt+Enter 并使用 转换为 String.Format 调用 上下文操作。 例如,如果我们在以下方法的 return 语句中应用此上下文操作:

public string Greet(string name, int age) { return "Hi, my name is " + name + " and I'm " + age; }

它将被转换为:

public string Greet(string name, int age) { return String.Format("Hi, my name is {0} and I'm {1}", name, age); }

您还可以使用上下文操作自动添加和删除字符串中的格式占位符和参数。 当您在字符串字面量中调用 插入格式实参 操作时,ReSharper 会插入一个具有正确索引的新占位符,并将您带到可以立即开始输入参数的位置。 此操作也可以在普通字符串上调用。 在这种情况下,ReSharper 会自动将其转换为 String.Format 调用。

要快速删除格式占位符及其对应的参数,请将光标放在占位符上,按下 Alt+Enter 并选择 移除格式实参

在自定义字符串格式化方法中

要在自定义字符串格式化方法中启用代码分析和辅助功能,请使用 [StringFormatMethod][StructuredMessageTemplate] 属性,这些属性来自 JetBrains.Annotations 命名空间

考虑一个自定义字符串格式化方法 ShowError

public void ShowError(string formatString, params object[] args) { // some custom logic Console.WriteLine(formatString, args); }

如果方法调用不正确,如下所示,ReSharper 无法检测到缺少的参数:

字符串格式化方法调用不正确

使 ReSharper 识别自定义字符串格式化方法

  1. 按照 源代码中的注解 部分的描述引用 JetBrains.Annotations 命名空间。

  2. 使用 [StringFormatMethodAttribute] 属性注释您的自定义字符串格式化方法,该属性接受一个参数——格式字符串参数的名称:

    [StringFormatMethod("formatString")] public void ShowError(string formatString, params object[] args) { // some custom logic Console.WriteLine(formatString, args); }

    当调用此自定义格式化方法时,ReSharper 将能够警告您缺少的参数。 此外, 添加参数 快速修复 将使您更容易插入它们:

    字符串格式化方法调用的快速修复
  3. 或者,使用 [StructuredMessageTemplateAttribute] 注释接受格式化字符串的参数:

    void LogNewUser([StructuredMessageTemplate] string message, params string[] args) { // Log new user } void Test() { // Warning: Non-existing argument in format string LogNewUser("User created: {username}"); }

    这种第二种方法允许您使用自定义字符串作为占位符,如上例中的 username

在插值字符串中

现代版本的 C# 提供了一种更优雅的替代方法来代替 String.Format 方法——插值字符串。 因此,ReSharper 会高亮显示 String.Format 的用法,并建议将其转换为插值字符串。 您可以使用 快速修复 来对当前用法或特定范围内的所有用法 应用转换 ,只需按几下键。

ReSharper:将 String.Format 的用法转换为字符串插值

如果插值字符串不包含任何表达式,ReSharper 会将 $ 符号高亮为冗余,并帮助您将其移除:

ReSharper:将无参数的字符串插值转换为字符串字面量

如果您需要在输入字符串时快速在字符串开头添加 $ ,您可以按下 Alt+Enter 并选择 转换为字符串内插

然后,您还可以选择 插入内插实参 ,ReSharper 将在您的光标位置添加参数占位符 { }

ReSharper:将简单字符串转换为字符串插值
最后修改日期: 2025年 9月 27日