我必须根据以下年龄段创建枚举。0-7岁的婴儿7-9岁的孩子10-12岁的青少年13-19岁的青少年20-25岁的年轻人26-65岁的成年人66-80岁的退休人员80+年龄的老人
public enum AgeGroup
{
retireeAges > 65 && <= 80,
}发布于 2018-10-15 17:54:17
枚举是一个常量值,而不是一个范围,那么你就不能直接表达这个概念。您有两个选项(按复杂度排序):
存储上限:
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;
}当然,在此基础上,您必须添加:
针对inputs.
==和!=,显然会覆盖Equals()并实现像public bool Includes(int age) => _fromInclusive <= age && _toExclusive > age;
这样的IEquatable<AgeGroup>).
正如Jon指出的,如果你担心new AgeGroup(),你应该考虑使用class而不是struct,这会将两个限制都初始化为0(好吧,你应该这样做)。我在这里使用struct只是为了避免小的8字节实体的class的开销(这可能更少,因为_fromInclusive和_toExclusive可能是byte),并避免在使用这些值时进行空检查(我希望看到这是一个模仿原语类型的小型只读实体)。
发布于 2018-10-15 17:48:32
Enum是常量值。不可能将范围或倍增值设置为枚举。
也许,您需要一些具有from和to值的范围结构。
https://stackoverflow.com/questions/52813939
复制相似问题