首页 > 解决方案 > 每个属性的唯一属性

问题描述

我写了一个属性类,后来我用它来对属性进行排序。

[AttributeUsage(AttributeTargets.Property)]
class OrderAttribute : Attribute
{
    internal OrderAttribute(int order)
    {
        Order = order;
    }
    public int Order { get; private set; }
}

我希望这对于类属性是唯一的,例如

有效场景

[Order(1)]
public string Tier3 { get; set; }

[Order(2)]
public string Tier4 { get; set; }

无效的场景,因为值“1”被重复。

[Order(1)]
public string Tier3 { get; set; }

[Order(1)]
public string Tier4 { get; set; }

PS:属性值可以针对不同的类属性重复,但不能相同。我怎样才能做到这一点?

标签: c#system.reflection

解决方案


尽管属性值可以重复,但没有简单的方法支持确保它们是唯一的(它们仅在运行时),您需要检查实际排序的时间,正如 Johnathan 已经提到的那样。有办法解决这个问题,但从长远来看值得吗?我能想到的几个选项是:

  1. 挂钩到实际的构建过程,创建一个使用反射检查并在需要时失败的构建任务。
  2. 运行加载您的 dll 并反映这些属性类型的构建后(构建后事件)步骤。
  3. 创建一个可能的规则来检查唯一性。

可能还有其他方法,但这些是我目前能想到的。


推荐阅读