c# - 每个属性的唯一属性
问题描述
我写了一个属性类,后来我用它来对属性进行排序。
[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 并反映这些属性类型的构建后(构建后事件)步骤。
- 创建一个可能的规则来检查唯一性。
可能还有其他方法,但这些是我目前能想到的。
推荐阅读
- oracle - Oracle 中的索引中出现“数字溢出”错误
- c# - 验证组合框选择
- unity3d - 有什么方法可以证明 Unity 2D 中的文本是正确的吗?
- format - Gstreamer - 名称中的 Unix 时间
- android - 哪些浏览器在印度主要用于 android 和 ios 设备
- javascript - 如何分配具有键和值的多维数组?
- html - HTML - FORM 空文件字段在服务器端提供(二进制)作为数据
- html - 带有嵌套元素的 CSS 粘性位置
- javascript - 传单:同一页面上的多个地图
- python - 使用字典、RobotFramework 时 Evaluate 和 SetVariable 之间的区别