有没有办法覆盖部分 类 中属性的应用顺序?

Is there a way to override order of application of attributes in partial classes?

我有 2 个文件包含部分 classes。一个生成的和一个手动的。我想覆盖、级联或以其他方式指定属性在编译时应用的顺序,以便更改 class 成员属性之一。

生成的代码:

[Table("dbo.product_variation")]
public partial class ProductVariation
{
    [Key]
    [Column("id")]
    public int Id { get; set; }

    [Required]
    [Column("style_id")]
    public int StyleId { get; set; }

    [Required]
    [Column("name"), StringLength(400)]
    public string Name { get; set; }

    [Column("general_description"), StringLength(2048), UIHint("MultilineText")]
    public string GeneralDescription { get; set; }
}

手动代码:

[MetadataType(typeof(ProductsMetadata))]
public partial class ProductVariation
{
}

public partial class ProductsMetadata
{
    [UIHint("RichText")]
    public string GeneralDescription { get; set; }
}

这里的真正意图是用 UIHint("RichText") 覆盖 UIHint("MultilineText")。这在一台开发机器上运行良好,而不是在另一台开发机器上运行良好,这让我相信 1) 也许我不应该两次指定特定属性,或者 2) 也许有一种方法可以强制命令覆盖属性正确。

没有。关键字 partial 表示 class(结构等)定义被拆分为两个或多个源文件,仅此而已。如果将每个部分复制到单个文件中并删除 partial 关键字,它将是相同的。 从技术上讲,您可以使用 [AttributeUsage(Inherited=false)] Are Method Attributes Inherited in C#?

更改 derived class 中的属性

这是不可能的,源代码中属性的顺序对编译器没有任何意义。

17.2 Attribute specification - MSDN

The order in which attributes are specified in such a list, and the order in which sections attached to the same program entity are arranged, is not significant

当你有部分 类 并且在不同的源文件中使用不同的属性时,编译器只会合并它们。

正如我所说,您不能让一个属性声明覆盖另一个声明,但是当您控制在 运行 时间使用该属性的代码时,您可以做的是获取应用的所有属性,应用您想要的任何顺序,并且只使用其中一个。但我不认为这是你的情况。