如何使用Resharper重新排列类型成员?
典型场景:很多人都从事过的课程。我想按字母顺序对方法,属性等进行排序。如何使用Resharper重新排列类型成员?
我希望能够在该地区或全球范围内做到这一点。
我在Resharper中看到了这个功能,但它似乎没有做任何事情。
使用“清理代码”功能。
可以在语言,C#,类型成员布局的ReSharper选项中设置成员的顺序。这是ReSharper在重新排序成员时使用的XML布局规范。
要考虑的替代方法是Regionerate。我们使用和喜欢ReSharper,但是Regionerate符合我们创建地区和排序/重新排列成员的需求。当然,这都是可定制的。
更新:我们已开始使用ReSharper's Code Cleanup代替。
我们使用它大约2个星期,但是当嵌套区域的扩散侵入我们的代码时,我们都扔掉它。这当然是个人品味的问题,但要确保你们都同意它的使用方式...... – zzzuperfly 2009-09-18 11:17:18
@zzzuperfly:是的,每个人都需要就标准达成一致,你需要调整配置。 – TrueWill 2009-09-18 14:31:47
如果你使用区域,它通常是你的班级太大的标志,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然后按向上或向下箭头在文件中上下移动单个成员。
(很显然,这不是按字母顺序自动排列被要求在问题的机构,但它是我希望我会找到在标题中的问题的答案。)
在Visual Studio菜单;
的ReSharper>选项>环境>智能感知>完成行为>排序项目(按字母顺序)
谢谢,所有。我最终安装了一个我已经拥有的MZ工具副本,但自2006年以来没有使用过。它具有该功能并且工作正常。 – AngryHacker 2009-09-18 18:56:55
同样的事情发生在我身上。它工作得很好,然后就停止了。 – 2011-05-11 19:08:12