JetBrains Rider 2025.2 Help

使用文件和类型布局模式重新排列成员

JetBrains Rider 可以根据不同的模式重新排序 C# 文件中的类型和类型成员。 模式可以描述许多条件和约束,这些条件和约束在重新排序文件中的项目和/或用指定区域包裹它们时会被评估。

布局模式简介

您可以配置多个布局模式以应用于不同的上下文(例如,您可以为类和接口设置不同的模式)。

在模式中,您可以按所需顺序指定匹配器条目和代码片段,以及将匹配的项目包裹/分组到的区域/组。

应用当前模式集的算法如下:

  1. 如果存在文件模式,JetBrains Rider 会检查文件中的区域是否应被移除,然后检查模式中的每个匹配器条目或代码片段是否匹配文件中的任何代码项。

  2. 如果有匹配的条目,它们在文件中的位置会根据文件模式中相应匹配器项的位置进行更改。

  3. 如果同一个代码项匹配多个匹配器条目,则应用优先级更高或约束更强的匹配器。 也就是说,如果有一个模式 A 匹配公共类型,另一个模式 B 匹配公共静态类型,那么所有公共静态类型将由模式 B 匹配。 要更改此行为,您可以提高模式 A 的优先级。

  4. 如果有具有相同约束集的匹配器条目,匹配的项目将根据这些匹配器条目中第一个的顺序移动。

  5. 如果指定了区域或组,匹配的项目将相应地被分组或用区域包裹。

    组或区域允许您为其指定优先级。 例如,如果组/区域的优先级高于其外部的其他匹配器,则 JetBrains Rider 会先处理组/区域内的匹配器,然后再处理其余的匹配器。 组和区域之间的唯一区别是区域将匹配的项目包裹在 #区域/#endregion 中。

  6. 所有未匹配的项目都会被移动到匹配项目之后。 如果您需要将未匹配的项目放置在其他位置,可以创建一个没有约束的匹配器,并在模式中为其设置所需的位置。

  7. 之后,如果有类型模式,将应用类型模式。 JetBrains Rider 会检查每个类型模式是否匹配文件中的任何类型。 如果一个类型有多个匹配的模式,冲突将类似于步骤 3 和 4 中解决。

  8. 当类型匹配确定后,JetBrains Rider 会检查类型中的区域是否应被移除;然后检查模式中的每个匹配器条目是否匹配文件中的任何成员。

  9. 如果有匹配的成员,它们在类型中的位置会根据类型模式中相应匹配器项的位置进行更改。

  10. 区域、组和未匹配的成员的处理方式与步骤 5 和 6 类似。

文件和类型布局偏好设置

默认的成员布局规则基于众多最佳实践,在大多数情况下都可以推荐使用。 但是,如果您的个人偏好或公司标准与 JetBrains Rider 的默认设置不同,您可以基于默认设置配置代码重新排序模式,也可以为特定情况创建新模式。

对布局模式的所有修改都在 JetBrains Rider 设置 的 编辑器 | 代码样式 | C# | 文件布局 页面中完成 Ctrl+Alt+S。 编辑完成后,单击 设置 对话框中的 保存 应用修改,让 JetBrains Rider 选择保存位置,或者通过从 保存 选择器中选择特定的设置层来保存修改。 如需了解更多信息,请参见 基于层的设置

通过编辑源 XAML 配置文件和类型布局

我们建议您加载一个默认模式并检查此格式中使用的标签。 它们相当直观,例如, 条目 标签定义了一个匹配器条目, Entry.Match 指定了应匹配哪些代码项。 Entry.SortBy 标签指定了匹配项的排序方式,等等。 考虑以下示例:

JetBrains Rider:通过编辑源 XAML 配置文件和类型布局

此 XAML 代码匹配构造函数,并以静态构造函数优先的方式对其进行排序。

场景:通过部分名称匹配将项目分组到区域中

假设一个类的所有方法都以 test 开头,然后其中一些方法有一个共同的子字符串,其他方法有另一个子字符串,依此类推:

public void test_groupOne_nameOne(){ /*...*/} public void test_groupTwo_nameTwo(){ /*...*/} public void test_groupOne_nameTwo(){ /*...*/} public void test_groupTwo_nameOne(){ /*...*/}

您可以使用类型布局将每组方法包裹在一个区域中,并使用共同的子字符串作为区域名称。

为此,请将以下模式添加到 XAML 中:

<TypePattern> <Region Name="${Name}" Priority="100"> <Region.GroupBy> <Name Is="(test\w+?)_.*" /> </Region.GroupBy> <Entry> <Entry.Match> <Name Is="test\w+?_.*" /> </Entry.Match> </Entry> </Region> </TypePattern>

应用布局 到类之后,方法将被排序并包裹在相应的区域中:

#region test_groupOne public void test_groupOne_nameOne(){ /*...*/ } public void test_groupOne_nameTwo(){ /*...*/ } #endregion #region test_groupTwo public void test_groupTwo_nameOne(){ /*...*/ } public void test_groupTwo_nameTwo(){ /*...*/ } #endregion

重新排序文件和类型成员

要在所需范围内应用您的文件和类型布局设置,请使用 运行代码清理 ,选择 内置:完全清理 配置文件,或创建并运行 自定义配置文件 ,仅针对您的特定任务,如下所述。

使用自定义代码清理配置文件应用文件和类型布局

  1. 按下 Ctrl+Alt+S 或从菜单中选择 文件 | 设置 (Windows 和 Linux)或 JetBrains Rider | 首选项 (macOS)。

  2. 转到代码清理配置文件设置页面: 编辑器 | 代码清理

  3. 按照 创建新的自定义清理配置文件 部分中描述的步骤创建一个新配置文件。 在新配置文件的 选定的配置文件设置 部分中,勾选 应用文件布局 复选框。 您还可以选择在此配置文件中启用其他代码清理任务。

  4. 在 设置 对话框中点击 保存 以应用修改,并让 JetBrains Rider 选择保存位置,或者通过从 保存 选择器中选择特定设置层来保存修改。 如需了解更多信息,请参见 基于层的设置

  5. 选择您希望应用文件布局的范围:

    • 将插入点放置在文件中的任意位置以对该文件应用文件布局。

    • 选择 解决方案资源管理器 中的一个或多个项目,以对这些节点及其子项目下的文件应用文件布局。

  6. Ctrl+R, C 或从主菜单中选择 代码 | 格式化和清理…

  7. 在打开的 重新格式化并清理代码 对话框中,选择新创建的配置文件,并根据需要选择另一个范围。 在打开的 重新格式化并清理代码 对话框中,选择新建的配置文件,并在需要时选择其他作用域。

  8. 点击 确定。 JetBrains Rider 将在选定范围内应用文件布局。

如果您希望在不打开 重新格式化并清理代码 对话框选择配置文件的情况下应用文件布局,可以将创建的配置文件绑定到 静默清理 ,并通过按 Ctrl+R, G 运行它。 您还可以创建一个 自定义清理配置文件 ,将文件布局应用与其他代码样式任务结合起来。

在特定类型中禁用成员重新排序

如果您希望在清理过程中重新排序成员,但希望保留特定类型中的原始成员顺序,请使用 [NoReorder] 属性标记这些类型,该属性来自 JetBrains.Annotations

最后修改日期: 2025年 9月 26日