我有一个枚举,假设:地图枚举为[标志]枚举
public enum ItemStatus {
Available, Unavailable
}
我有一个返回的电视列表,基于过滤器的方法。
[Flags]
public enum ItemStatusFilter {
Available = 1, Unavailable = 2
}
问:什么是检查是否ItemStatus给出实例相匹配给出ItemStatusFilter的实例光滑的方式而滤波器是由枚举表示?
我不喜欢为ItemStatus成员赋值(1,2)的想法,因为它不是该枚举所要求的。现在我的代码看起来如下:
public static bool Matches(this TagStatusFilter statusFilter, TagStatus status) {
if (status == TagStatus.Available && ((statusFilter & TagStatusFilter.Available) != 0)) return true;
if (status == TagStatus.Unavailable && ((statusFilter & TagStatusFilter.Unavailable) != 0)) return true;
return false;
}
沿着这些方向怎么办?
[Flags]
public enum TagStatusFilter {
Available = 1 << TagStatus.Available,
Unavailable = 1 << TagStatus.Unavailable
}
目标是减少代码量,并减少类型之间的耦合。
是否觉得enum TagStatusFilter
在这里被滥用?
可能返回误报,如果一个枚举成员的名字也是另一个成员的子字符串。 – 2009-09-25 12:37:32
不在此例中,因为枚举的第一个字母是大写。 小心显然是建议,我确实说我不喜欢它..但它肯定会在这个实例工作:) – Sk93 2009-09-26 16:04:14