我必须根据以下年龄段创建枚举。 0-7岁的婴儿 7至9岁的儿童 10至12岁的青少年 13-19岁的青少年 20-25岁的年轻人 26至65岁的成人 66-80岁的退休人员 一位80岁以上的老人
public enum AgeGroup
{
retireeAges > 65 && <= 80,
}
答案 0 :(得分:2)
枚举是一个常数,而不是范围,因此您不能直接表达此概念。您有两种选择(按复杂性排序):
存储上限:
public enum AgeGroup {
Baby = 7,
Child = 9,
Preteen = 12,
Teenager = 19,
YoungAdult = 25,
Adult = 65,
Retiree = 80,
Old = Int32.MaxValue
}
显然,这使使用它的代码更加复杂。为什么不改用struct
?
public struct AgeGroup {
public static readonly Baby = new AgeGroup(0, 7);
public static readonly Child = new AgeGroup(7, 9);
public AgeGroup(int fromInclusive, toExclusive) {
this._fromInclusive = fromInclusive;
this._toExclusive = toExclusive;
}
private int _fromInclusive, _toExclusive;
}
当然必须在此顶部添加:
==
和!=
,显然会覆盖Equals()
并实现IEquatable<AgeGroup>
)。public bool Includes(int age) => _fromInclusive <= age && _toExclusive > age;
正如乔恩(Jon)所指出的那样,如果您担心class
会将两个限制都初始化为0,那么您应该考虑使用struct
而不是new AgeGroup()
。我在这里使用struct
只是为了避免为较小的8字节实体提供class
的开销(因为_fromInclusive
和_toExclusive
可能是{{ 1}}),并避免在使用这些值时进行空检查(我很乐意将其视为模仿原始类型的小型只读实体)。
答案 1 :(得分:0)
Enum是常数。设置范围或将值乘以枚举是不可能的。
也许,您需要一些带有from和to值的范围结构。