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

问题描述:

典型场景:很多人都从事过的课程。我想按字母顺序对方法,属性等进行排序。如何使用Resharper重新排列类型成员?

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

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

+0

谢谢,所有。我最终安装了一个我已经拥有的MZ工具副本,但自2006年以来没有使用过。它具有该功能并且工作正常。 – AngryHacker 2009-09-18 18:56:55

+0

同样的事情发生在我身上。它工作得很好,然后就停止了。 – 2011-05-11 19:08:12

使用“清理代码”功能。

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

+28

它实际上不工作。 – Kyle 2011-12-29 14:56:57

+8

@Kyle,如果你告诉R#对会员进行重新排序,并且你的布局规范是正确的,它确实有效。有关详细信息,请参阅R#文档;有些类型(如单元测试类和具有顺序布局属性的互操作结构)不受欢迎,但因为顺序可能有意义。 – Lucero 2011-12-29 16:58:00

+1

我在R#规范中没有看到按字母顺序排序的任何内容。 – manu08 2013-01-17 14:22:44

要考虑的替代方法是Regionerate。我们使用和喜欢ReSharper,但是Regionerate符合我们创建地区和排序/重新排列成员的需求。当然,这都是可定制的。

更新:我们已开始使用ReSharper's Code Cleanup代替。

+0

我们使用它大约2个星期,但是当嵌套区域的扩散侵入我们的代码时,我们都扔掉它。这当然是个人品味的问题,但要确保你们都同意它的使用方式...... – zzzuperfly 2009-09-18 11:17:18

+0

@zzzuperfly:是的,每个人都需要就标准达成一致,你需要调整配置。 – TrueWill 2009-09-18 14:31:47

+3

如果你使用区域,它通常是你的班级太大的标志,big = class意味着你每个班级的职责太多 – roundcrisis 2010-05-21 14:22:58

有两件事:有一个已知的(但没有严重记录)条件,其中预编译条件(例如#if DEBUG)将停止类型成员重新排序。 http://youtrack.jetbrains.com/issue/RSRP-336643#tab=Comments 换句话说,如果你有#IF DEBUG,那么它将不会重新排序。

我最近还注意到,在ReSharper 8.0.1(以及可能更早的版本)中,将XML模板恢复为DEFAULT WITH REGIONS的按钮并没有包含#REGION分组的任何语句。所以我采用了StyleCop友好的模板,其中包括排序并将#REGION-ing添加到每个类型成员。如果你选择CUSTOM TEMPLATE,那么粘贴这个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> 

对于人和我一样,谁降落在这个问题上通过网络搜索,但发现该问题的细节是不是很出乎他们的意料的利益,你可能会喜欢知道您可以通过按住Ctrl-Alt-Shift然后按向上或向下箭头在文件中上下移动单个成员。

(很显然,这不是按字母顺序自动排列被要求在问题的机构,但它是我希望我会找到在标题中的问题的答案。)

+0

这是有用的信息,可以帮助人们在这个问题上磕磕绊绊。我在最初的投稿中发现了我在寻找的答案,但是您的回答提供了一个有用的快捷方式,可以在飞行中使用。 – 2015-01-08 05:41:54

+1

我会添加你可以点击ctrl + m,ctrl + 0来折叠所有的方法。然后,您可以移动如上所述的一组方法。 – jwize 2016-05-11 22:02:22

+0

谢谢,这就是我来这里寻找的。 – NJH 2017-10-27 04:19:27

在Visual Studio菜单;

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

排序默认情况下不激活。您可以通过打开ReSharper的选项激活它,然后去这里:

enter image description here

+0

它看起来像没有选择按名称重新排序同一个文件中的类......你知道这可能吗? – montelof 2016-07-18 20:40:34

+3

我不知道。我从不在同一个文件中放置多个类。 – jgauffin 2016-07-18 21:05:10

+0

谢谢!正是我在找什么。这很好。 – aoakeson 2016-08-23 22:45:52

如果您正在重新排序的具体方法的参数,你可以使用重构>更改签名,如果你的光标在一个方法名。我使用IntelliJ快捷键,因此对于我来说,命令是Ctrl + Shift + R,然后是Ctrl + F6。

Refactor context menu

这样做后,将弹出对话框,让你重新排序方法的参数。它甚至会重构接口的任何实现。