完整的Java枚举功能在C#中不可用。你可以来 合理地 接近使用嵌套类型和私有构造虽然。例如:
using System;using System.Collections.Generic;using System.Xml.Linq;public abstract class Operator{ public static readonly Operator Plus = new PlusOperator(); public static readonly Operator Minus = new GenericOperator((x, y) => x - y); public static readonly Operator Times = new GenericOperator((x, y) => x * y); public static readonly Operator Divide = new GenericOperator((x, y) => x / y); // Prevent other top-level types from instantiating private Operator() { } public abstract int Execute(int left, int right); private class PlusOperator : Operator { public override int Execute(int left, int right) { return left + right; } } private class GenericOperator : Operator { private readonly Func<int, int, int> op; internal GenericOperator(Func<int, int, int> op) { this.op = op; } public override int Execute(int left, int right) { return op(left, right); } }}当然你不 具备
使用嵌套类型,但他们给了方便的“自定义的行为”其中一部分的Java枚举是好的。在其他情况下,您可以仅将参数传递给私有构造函数以获取众所周知的受限值集。
一些不能给您的事情:
- 顺序支持
- 开关支持
EnumSet
- 序列化/反序列化(作为单例)
尽管没有黑客,切换实际上是不可行的,但其中的一些工作可能需要付出足够的努力。现在,如果该 语言
做了类似的事情,它可以通过使黑客自动操作(例如自动声明
const字段负载,并将枚举类型的任何切换更改为整数的切换,仅允许“ “案例。)
哦,部分类型意味着您不必在同一个文件中包含 所有 枚举值。如果每个值都涉及到(这绝对是可能的),则每个值都有自己的文件。



