Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 每个属性的唯一属性_C#_System.reflection - Fatal编程技术网

C# 每个属性的唯一属性

C# 每个属性的唯一属性,c#,system.reflection,C#,System.reflection,我已经编写了一个属性类,稍后用于对属性进行排序 [AttributeUsage(AttributeTargets.Property)] class OrderAttribute : Attribute { internal OrderAttribute(int order) { Order = order; } public int Order { get; private set; } } 我希望它对于类属性是唯一的,例如 有效情景 [Orde

我已经编写了一个属性类,稍后用于对属性进行排序

[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:属性值可以为不同的类属性重复,但不能在同一个类中重复。如何实现这一点?

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

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

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

    在编译时是不可能的;您需要在排序时进行检查。@JohnathanBarclay谢谢您的建议。这就是我正在使用的工作,但不幸的是,这会耗费大量的时间,最终会失败。我希望反思会支持这一点:)我觉得选择2对我来说是可行的。谢谢你的努力,先生:)\@Imad不客气,我之前已经完成了后期构建并使用FXCop创建了一个规则。后期构建并不太糟糕,在这种情况下,它比编写自定义规则更容易。