使用ReSharper按类型然后按名称对成员进行排序

本文关键字:成员 排序 ReSharper 类型 然后 使用 | 更新日期: 2023-09-27 18:22:11

我一直在尝试让ReSharpers代码清理不仅按名称的字母顺序对任何成员进行排序,而且主要按它们的类型(无论是方法返回类型还是属性类型等)进行排序,然后按它们的名称进行排序。

例如:

#region " Properties "
public string Name { get; set; }
public int Age { get; set; }
#endregion
#region " Instance Methods "
public void SecondMethod()...
public void FirstMethod()...
public Post GetPost()...
public List<Post> GetPosts()...
#endregion

将变成:

#region " Properties "
public int Age { get; set; }
public string Name { get; set; }
#endregion
#region " Instance Methods "
public List<Post> GetPosts()...
public Post GetPost()...
public void FirstMethod()...
public void SecondMethod()...
#endregion

理想情况下,我希望其他默认行为保持不变,例如,构造函数、属性的位置/分组,以及如果一个区域内出现多个成员(如上面的示例),则该组成员将独立于该组/区域外的成员进行排序。

有人能在ReSharper Type Members Layout模式编辑器中推荐必要的代码来实现这一点吗?

使用ReSharper按类型然后按名称对成员进行排序

查看Resharper中的类型成员布局,我猜这是不可能的。以下是事件区域的示例片段:

<Entry>
    <Match>
        <Kind Is="event"/>
    </Match>
    <Sort>
        <Access Order="public internal protected-internal protected private" />
        <Static />
        <Name/>
    </Sort>
    <Group Region="Events"/>
</Entry>

以下是JetBrains自己的一篇文章:深入研究使用重新锐化自定义类型布局。

遗憾的是,返回类型似乎没有用于排序的限定符。以下是该帖子中提到的选项:

 - <Kind Is=”$val” [Order=”$val”]>
 - <Name Is="$val” [IgnoreCase=”true/false”]>
 - <HasAttribute CLRName=”$val” [Inherit=”true/false”]>
 - <Access Is=”$val”>
 - <Static/>
 - <Abstract/>
 - <Virtual/>
 - <Sealed/>
 - <Readonly/>
 - <ImplementsInterface CLRName=”$val” [Immediate=”true/false”]>
 - <HandlesEvent/>

您可以联系JetBrains,请求在列表中添加一个新的操作数。看起来相当简单。可能类似于:

<ReturnType="$val" [Order="$val"][AlphaOrder="true/false"]>