我有一个带枚举的课程
namespace Entities
{
public partial class OrderStatusType : Entity
{
public enum EOrderStatusType
{
P2 = 1,
Mounting = 2,
}
}
}
然后我有一个界面
namespace Interfaces
{
public interface IAttribute<T>
{
T Value { get; }
}
}
和另一个班级
namespace Entities
{
public partial class OrderStatus : Entity
{
[DataContract]
public enum EOrderStatus
{
[EnumMember(Value = "Film Ordered"), EnumParent(OrderStatusType.EOrderStatusType.P2)]
FilmOrdered = 1,
[EnumMember(Value = "Not Started"), EnumParent(OrderStatusType.EOrderStatusType.P2)]
NotStarted = 2,
[EnumMember(Value = "Cliche Ordered"), EnumParent(OrderStatusType.EOrderStatusType.P2)]
ClicheOrdered = 3,
[EnumMember(Value = "Cliche In Stock"), EnumParent(OrderStatusType.EOrderStatusType.P2)]
ClicheInStock = 4,
[EnumMember(Value = "Cliche Prepared"), EnumParent(OrderStatusType.EOrderStatusType.P2)]
ClichePrepared = 5,
[EnumMember(Value = "Ready to start"), EnumParent(OrderStatusType.EOrderStatusType.P2)]
Readytostart = 6,
[EnumMember(Value = "Started"), EnumParent(OrderStatusType.EOrderStatusType.P2)]
Started = 7,
[EnumMember(Value = "Interrupted"), EnumParent(OrderStatusType.EOrderStatusType.P2)]
Interrupted = 8,
[EnumMember(Value = "Completed"), EnumParent(OrderStatusType.EOrderStatusType.P2)]
Completed = 9,
[EnumMember(Value = "ClichV status"), EnumParent(OrderStatusType.EOrderStatusType.P2)]
ClichVstatus = 10,
[EnumMember(Value = "Cliche Mounting"), EnumParent(OrderStatusType.EOrderStatusType.P2)]
ClicheMounting = 11,
[EnumMember(Value = "In Stock"), EnumParent(OrderStatusType.EOrderStatusType.P2)]
InStock = 12,
[EnumMember(Value = "Ordine con cilindri montati"), EnumParent(OrderStatusType.EOrderStatusType.Mounting)]
OrdineConCilindriMontati = 13,
}
[AttributeUsage(AttributeTargets.Field)]
public sealed class EnumParentAttribute : Attribute, Library.Interfaces.IAttribute<OrderStatusType.EOrderStatusType>
{
public EnumParentAttribute(OrderStatusType.EOrderStatusType EOrderStatusType) { this.mValue = EOrderStatusType; }
private OrderStatusType.EOrderStatusType mValue;
public OrderStatusType.EOrderStatusType Value { get { return mValue; } }
}
}
}
在OrderStatus类中,我创建了一个密封的子类EnumParentAttribute,它继承自属性并实现了接口,我可以在其中传递OrderStatusType.EOrderStatusType类型的参数,所以现在我可以使用自定义属性EnumParent来装饰枚举EOrderStatus的项目,接受OrderStatusType.EOrderStatusType类型的参数。
原因是我想在两个枚举之间创建一种儿子 - 父亲的关系。 但是我想再迈一两步......
问题:
1)如何添加“constarint”,强制我使用自定义属性EnumParent修饰新的EOrderStatusType项?有一种方法可以要求编译器在编译期间通知异常吗? 2)如何扩展EOrderStatusType枚举,以便我可以编写如下代码: OrderStatus.EOrderStatusType(P2)l_MyEnum = OrderStatus.EOrderStatus.FilmOrdered; Intellisense只向我显示“正确”父项的项目?
对不起我的英语,我希望这是可以理解的......
提前致谢!
答案 0 :(得分:0)
如何添加&#34; constarint&#34;这迫使我用自定义属性EnumParent修饰一个新的EOrderStatusType项?有一种方法可以要求编译器在编译期间通知异常吗?
两个选项:
如何扩展EOrderStatusType枚举,以便我可以编写如下代码:OrderStatus.EOrderStatusType(P2)l_MyEnum = OrderStatus.EOrderStatus.FilmOrdered;
老实说,即使罗斯琳,我也不认为你能做到这一点。
顺便说一句,我强烈建议您从枚举类型中删除E
前缀。 Ick:)