典型场景:很多人都参与过的课程。我想按字母顺序对方法,属性等进行排序。
我希望能够在该地区或全球范围内这样做。
我在Resharper中看到了这个功能,但它似乎没有做任何事情。
答案 0 :(得分:83)
使用“清理代码”功能。
可以在语言,C#,类型成员布局中的ReSharper选项中设置成员的顺序。这是一个记录良好的XML布局规范,ReSharper在重新排序成员时使用它。
答案 1 :(得分:50)
答案 2 :(得分:44)
为了像我这样的人,通过网络搜索找到这个问题,但发现问题的细节不是他们期望的那样,你可能想知道你可以移动个人成员按住Ctrl-Alt-Shift然后按向上或向下箭头,在文件中向下移动。
(显然,这不是按字母顺序在问题正文中提出的自动安排,但这是我希望我会在标题中找到问题的答案。)
答案 3 :(得分:4)
另一种考虑因素是Regionerate。我们使用和使用ReSharper,但Regionerate符合我们创建区域和排序/重新排列成员的需求。当然,它都是可定制的。
更新:我们已经开始使用ReSharper's Code Cleanup了。
答案 4 :(得分:3)
两件事:有一个已知的(但没有大量记录)条件,其中预编译条件(例如#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>
答案 5 :(得分:0)
如果要重新排序特定方法的参数,可以使用Refactor&gt;如果光标位于方法名称上,请更改签名。我使用IntelliJ快捷方式,所以对我来说,命令是Ctrl + Shift + R,然后是Ctrl + F6。
执行此操作后,将弹出一个对话框,允许您重新排序方法参数。它甚至会重构任何接口的实现。
答案 6 :(得分:0)
jgauffin的答案很接近,但我发现(使用R#2017)重新排序属性我需要单击“文件布局”对话框标题中的“XAML”选项并更改
<Entry DisplayName="Properties, Indexers">
<Entry.Match>
<Or>
<Kind Is="Property" />
<Kind Is="Indexer" />
</Or>
</Entry.Match>
</Entry>
到
<Entry DisplayName="Properties, Indexers">
<Entry.Match>
<Or>
<Kind Is="Property" />
<Kind Is="Indexer" />
</Or>
</Entry.Match>
<Entry.SortBy>
<Name />
</Entry.SortBy>
</Entry>
'Sort By'属性为空且只读,这是有道理的,因为它仅用于具有相同名称的项目(并且所有属性都应该唯一命名)
答案 7 :(得分:-1)
从Visual Studio菜单;
ReSharper&gt;选项&gt;环境&gt; IntelliSense&gt;完成行为&gt;对项目进行排序(按字母顺序排列)