gpt4 book ai didi

c# - ReSharper 类型成员布局排序和 [DataMember] 属性

转载 作者:行者123 更新时间:2023-11-30 16:56:47 25 4
gpt4 key购买 nike

我想使用 [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 的默认设置是不重新排序属性,因此您提供的示例不会重新排序。但是,它确实按名称对字段进行排序,您可能会遇到这种情况。

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

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

ReSharper 8 让您在一个略有不同的选项页面中编辑一个可怕的 XML 文件:代码编辑 → C# → 类型成员布局。选择“Custom layout”并向下滚动,直到找到带有注释“Do not reorder COM interfaces...”的部分。你想创建一个新的 Pattern 元素,看起来像这样:

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

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

关于c# - ReSharper 类型成员布局排序和 [DataMember] 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27491207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com