如何使用Resharper重新排列types成员?

典型的场景:一个很多人都在做的类。 我想按字母顺序sorting方法,属性等。

我希望能够在本地区或全球范围内做到这一点。

我在Resharper中看到了这个function,但它似乎没有做任何事情。

使用“清除代码”function。

可以在语言,C#,types成员布局的ReSharper选项中设置成员的顺序。 这是ReSharper在重新sorting成员时使用的XML布局规范。

对于像我这样的人来说,通过networkingsearch来解决这个问题,但发现问题的细节并不完全符合他们所期望的,您可能想知道,您可以将个别成员上下移动按住Ctrl-Alt-Shift,然后按下向上或向下箭头。

(很显然,这不是在问题的主体中按字母顺序排列的自动化安排,而是我希望在标题中find问题的答案。)

sorting不是默认激活的。 你可以通过打开resharper选项激活它,然后去这里:

在这里输入图像说明

另一种考虑是Regionerate 。 我们使用和喜欢ReSharper,但是Regionerate符合我们创build地区和sorting/重新排列成员的需求。 当然,这都是可定制的。

更新:我们已经开始使用ReSharper的代码清理 。

有两件事:有一个已知(但没有严重logging)的条件,预编译条件(例如#if DEBUG)将停止types成员重新sorting。 换句话说,如果你有#IFdebugging,那么它将不会重新sorting。

我最近还注意到,在ReSharper 8.0.1(以及可能更早的版本)中,将XML模板恢复为DEFAULT WITH REGIONS的button并没有包含#REGION分组的任何语句。 所以我带了一个StyleCop友好的模板,包括sorting和添加#REGION-ing到每个types的成员。 如果您select自定义模板,然后粘贴这个XML应该工作。

 <Patterns xmlns="urn:shemas-jetbrains-com:member-reordering-patterns"> <!-- Do not reorder COM interfaces --> <Pattern> <Match> <And Weight="100"> <Kind Is="interface" /> <HasAttribute CLRName="System.Runtime.InteropServices.InterfaceTypeAttribute" /> </And> </Match> </Pattern> <!-- Special formatting of NUnit test fixture --> <Pattern RemoveAllRegions="true"> <Match> <And Weight="100"> <Kind Is="class" /> <HasAttribute CLRName="NUnit.Framework.TestFixtureAttribute" Inherit="true" /> </And> </Match> <!-- Setup/Teardow --> <Entry> <Match> <And> <Kind Is="method" /> <Or> <HasAttribute CLRName="NUnit.Framework.SetUpAttribute" Inherit="true" /> <HasAttribute CLRName="NUnit.Framework.TearDownAttribute" Inherit="true" /> <HasAttribute CLRName="NUnit.Framework.FixtureSetUpAttribute" Inherit="true" /> <HasAttribute CLRName="NUnit.Framework.FixtureTearDownAttribute" Inherit="true" /> </Or> </And> </Match> </Entry> <!-- All other members --> <Entry /> <!-- Test methods --> <Entry> <Match> <And Weight="100"> <Kind Is="method" /> <HasAttribute CLRName="NUnit.Framework.TestAttribute" Inherit="false" /> </And> </Match> <Sort> <Name /> </Sort> </Entry> </Pattern> <!-- Default pattern --> <Pattern RemoveAllRegions="false"> <!-- Delegates --> <Entry> <Match> <And Weight="100"> <Access Is="public" /> <Kind Is="delegate" /> </And> </Match> <Sort> <Access Order="public internal protected-internal protected private" /> <Name /> </Sort> <Group Region="Delegates" /> </Entry> <!-- Fields and constants --> <Entry> <Match> <Or> <Kind Is="field" /> <Kind Is="constant" /> </Or> </Match> <Sort> <Access Order="public internal protected-internal protected private" /> <Kind Order="constant" /> <Readonly /> <Static /> <Name /> </Sort> <Group Region="Fields" /> </Entry> <!-- Enums --> <Entry> <Match> <Kind Is="enum" /> </Match> <Sort> <Access Order="public internal protected-internal protected private" /> <Name /> </Sort> <Group Region="Enums" /> </Entry> <!-- Constructors. Place static one first --> <Entry> <Match> <Kind Is="constructor" /> </Match> <Sort> <Static /> <Access Order="public internal protected-internal protected private" /> </Sort> <Group Region="Constructors" /> </Entry> <!-- Destructors. Place static one first --> <Entry> <Match> <Kind Is="destructor" /> </Match> <Sort> <Static /> <Access Order="public internal protected-internal protected private" /> </Sort> <Group Region="Destructors" /> </Entry> <!-- Events --> <Entry> <Match> <Kind Is="event" /> </Match> <Sort> <Access Order="public internal protected-internal protected private" /> <Name /> </Sort> <Group Region="Events" /> </Entry> <!-- Properties --> <Entry> <Match> <And> <Kind Is="property" /> <Not> <Kind Is="indexer" /> </Not> </And> </Match> <Sort> <Access Order="public internal protected-internal protected private" /> <Static /> <Abstract /> <Virtual /> <Override /> <Name /> </Sort> <Group Region="Properties" /> </Entry> <!-- Indexers --> <Entry> <Match> <Kind Is="indexer" /> </Match> <Sort> <Access Order="public internal protected-internal protected private" /> <Static /> <Abstract /> <Virtual /> <Override /> <Name /> </Sort> <Group Region="Indexers" /> </Entry> <!-- Methods --> <Entry> <Match> <And> <Or> <Kind Is="method" /> <Kind Is="operator" /> <HandlesEvent /> </Or> <Not> <Kind Is="destructor" /> </Not> </And> </Match> <Sort> <Access Order="public internal protected-internal protected private" /> <Static /> <Abstract /> <Virtual /> <Override /> <Name /> </Sort> <Group Region="Methods" /> </Entry> <!-- all other members --> <Entry /> <!-- nested types --> <Entry> <Match> <Kind Is="type" /> </Match> <Sort> <Access Order="public internal protected-internal protected private" /> <Static /> <Abstract /> <Virtual /> <Override /> <Name /> </Sort> <Group Region="Nested Types" /> </Entry> </Pattern> 

从Visual Studio菜单;

ReSharper>选项>环境>智能感知>完成行为>sorting项目(按字母顺序)

如果您要对特定方法的参数进行重新sorting,则如果光标位于方法名称上,则可以使用“重构”>“更改签名”。 我使用IntelliJ快捷键,所以对我来说,命令是Ctrl + Shift + R,然后是Ctrl + F6。

重构上下文菜单

这样做后,会popup一个对话框,允许您重新sorting方法参数。 它甚至会重构接口的任何实现。