根据范围C#创建枚举

时间:2018-10-15 09:46:20

标签: c#

我必须根据以下年龄段创建枚举。 0-7岁的婴儿 7至9岁的儿童 10至12岁的青少年 13-19岁的青少年 20-25岁的年轻人 26至65岁的成人 66-80岁的退休人员 一位80岁以上的老人

public enum AgeGroup
        {
            retireeAges >  65 && <= 80,

        }

2 个答案:

答案 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值的范围结构。