如何通过ReSharper Code Cleanup对区域内成员应用排序规则?
解决ReSharper区域内成员排序规则不生效的问题
哈哈,这个问题我之前也踩过坑!ReSharper默认确实会把#region块当成一个不可拆分的整体,不会主动调整区域内部的成员顺序,但其实只要稍微调整文件布局配置,就能让它在保留区域结构的同时,对区域内的成员应用你设置的排序规则。
具体配置步骤:
- 打开ReSharper设置:用快捷键
Alt+R, O(或者通过菜单栏ReSharper → Options),找到Code Editing → C# → File Layout。 - 找到你正在使用的布局方案(默认是"Default",如果有自定义方案就选你的自定义项),展开到你已经配置好的「Fields」排序节点。
- 核心操作:给区域添加递归处理规则
- 右键点击布局根节点(比如「Type Members」),选择Add → Region,创建一个Region节点。
- 选中这个新的Region节点,在右侧属性面板里设置:
- 「Process contents」改为
Yes(这是让ReSharper递归处理区域内成员的关键); - 如果只想针对特定名称的区域生效(比如
#region Private Fields),可以在「Name pattern」里填写对应的区域名称,留空的话会匹配所有区域。
- 「Process contents」改为
- 把你之前配置好的「Fields」节点(就是按Readonly排序、Access二次排序的那个),拖到这个Region节点下面,作为它的子节点。
- 同时,确保原来在「Type Members」下的「Fields」节点保留不变,这样区域外的字段依然会遵循同样的规则。
- 检查Code Cleanup配置:打开Code Cleanup设置(
Alt+R, C, S),选中你常用的Cleanup配置,确保勾选了Reorder members选项,并且关联了你刚才调整好的文件布局方案。
示例布局结构参考:
Type Members - Region (Process contents: Yes, Name pattern: [留空或特定区域名]) - Fields (Sort by: Readonly (Descending), Then by: Access (Ascending)) - Fields (Sort by: Readonly (Descending), Then by: Access (Ascending))
测试验证:
设置完成后,按下Alt+R, C运行Code Cleanup,选择你的配置。你会发现区域内的字段现在会按照你设置的Readonly+Access规则重新排序,同时区域的结构完全保留,不会被合并或删除。
如果还有问题,你可以检查一下是不是布局里的Region节点优先级设置得不对,或者有没有其他布局规则覆盖了这个设置——一般来说,只要确保Region节点的「Process contents」是开启的,并且子节点的排序规则和外部一致,就能解决问题。
内容的提问来源于stack exchange,提问作者Collin Barrett
相关产品推荐
相关产品推荐

