ReSharper 类型成员布局排序和 [数据成员] 属性

本文关键字:数据成员 属性 排序 类型 成员 布局 ReSharper | 更新日期: 2023-09-27 18:34:15

我想使用 [DataMember] 属性定义标准 WCF 数据协定。我还想指定 Order 属性。 执行自动格式化时,ReSharper 会重新排序我的属性,以便它们不再按照 [DataMember] 属性中指定的顺序排列。

现在这对编译的代码没有影响,但它确实让它很烦人。

有没有办法使 ReSharper 的类型成员布局遵循我在属性中定义的顺序?

public class MyDataContract
{
    [DataMember(Order = 1)]
    public int One { get; set; }
    [DataMember(Order = 2)]
    public int Two { get; set; }
    [DataMember(Order = 3)]
    public int Three { get; set; }
}
现在,由于一,二

,三不是按字母顺序排列的,因此默认排序是使其成为一,三,二。 有什么办法可以改变这一点吗? 我知道类型成员布局能够注意到属性,但无法找到从属性中收集数据并将其用于排序的方法。

谢谢!

ReSharper 类型成员布局排序和 [数据成员] 属性

据我所知,ReSharper 的默认值是不对属性进行重新排序,因此您给出的示例不会被重新排序。但是,它确实按名称对字段进行排序,这可能是您遇到的问题。

幸运的是,可以使用"选项"对话框编辑订单。但是,据我所知,您需要指定一个类属性以匹配正在应用的规则。在这种情况下,您的类可以具有 [DataContract] 属性,这使得一切变得简单而简单。

ReSharper 9有一个漂亮的闪亮的新可视化编辑器来定义布局和排序:代码编辑→C#→文件布局。可以查看 COM 互操作规则,了解如何处理它们以忽略 COM 结构的排序(基本上,匹配 COM 属性并且没有规则(。

ReSharper 8 让你在一个稍微不同的选项页面中编辑一个可怕的 XML 文件:代码编辑 → C# →类型成员布局。选择"自定义布局"并向下滚动,直到找到带有注释"不要对 COM 接口重新排序..."的部分。您想要创建一个如下所示的新Pattern元素:

<Pattern>
  <Match>
    <And>
      <Kind Is="class"/>
      <HasAttribute CLRName="System.Runtime.Serialization.DataContractAttribute"/>
    </And>
  </Match>
</Pattern>

此模式将类与 [DataContract] 属性匹配,但不指定任何规则,因此不会对属性或字段重新排序。