首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据范围C#创建枚举

根据范围C#创建枚举
EN

Stack Overflow用户
提问于 2018-10-15 17:46:20
回答 2查看 823关注 0票数 0

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

代码语言:javascript
复制
public enum AgeGroup
        {
            retireeAges >  65 && <= 80,

        }
EN

回答 2

Stack Overflow用户

发布于 2018-10-15 17:54:17

枚举是一个常量值,而不是一个范围,那么你就不能直接表达这个概念。您有两个选项(按复杂度排序):

存储上限:

代码语言:javascript
复制
public enum AgeGroup {
    Baby = 7,
    Child = 9,
    Preteen = 12,
    Teenager = 19,
    YoungAdult = 25,
    Adult = 65,
    Retiree = 80,
    Old = Int32.MaxValue
}

显然,这会使使用它的代码变得更加复杂。为什么不使用struct呢?

代码语言:javascript
复制
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;
}

当然,在此基础上,您必须添加:

针对inputs.

  • Comparison运算符的

  • 正确验证(至少是==!=,显然会覆盖Equals()并实现像public bool Includes(int age) => _fromInclusive <= age && _toExclusive > age;

这样的IEquatable<AgeGroup>).

  • Some实用程序函数

正如Jon指出的,如果你担心new AgeGroup(),你应该考虑使用class而不是struct,这会将两个限制都初始化为0(好吧,你应该这样做)。我在这里使用struct只是为了避免小的8字节实体的class的开销(这可能更少,因为_fromInclusive_toExclusive可能是byte),并避免在使用这些值时进行空检查(我希望看到这是一个模仿原语类型的小型只读实体)。

票数 2
EN

Stack Overflow用户

发布于 2018-10-15 17:48:32

Enum是常量值。不可能将范围或倍增值设置为枚举。

也许,您需要一些具有from和to值的范围结构。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52813939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档