每个 属性 的唯一属性

Unique attribute for each property

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

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

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

有效场景

[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:属性值可以针对不同的 class 属性重复,但不能重复。我怎样才能做到这一点?

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

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

可能还有其他的方法,暂时能想到的就这些了