问题标签 [enums]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 如何消除重复的枚举代码?
我有大量实现此接口的枚举:
一个典型的例子是:
可以想象,这些方法在 CodableEnum 的所有实现中几乎是相同的。我想消除这种重复,但坦率地说不知道如何。我尝试使用如下类:
但事实证明这毫无用处,因为:
- 枚举不能扩展类
- 枚举的元素(SKYPE、GOOGLE_TALK 等)不能扩展类
- 我无法提供 getByCode() 的默认实现,因为 DefaultCodableEnum 本身不是 Enum。我尝试更改 DefaultCodableEnum 以扩展 java.lang.Enum,但这似乎是不允许的。
有什么不依赖反思的建议吗?谢谢,唐
nhibernate - 使用 NHibernate 映射枚举集合
使用 NHibernate 映射枚举集合
具体来说,使用 Attributes 进行映射。
目前我有这个工作将集合映射为 Int32 类型,NH 似乎可以处理它,但它并不完全理想。
尝试将集合映射为我尝试映射的枚举类型时,我收到的错误是“无法确定类型”。
我发现一个帖子说将一个类定义为
然后将枚举映射为 CEnumType,但这会给出“CEnumType is not mapped”或类似的东西。
那么有没有人有这样做的经验?
所以无论如何,只是一个简单的参考代码片段来举一个例子
那么,任何人都得到了正确的属性让我将这个枚举集合映射为实际的枚举?如果它们也作为字符串而不是整数存储在数据库中,那就太好了,但这并不是完全必要的。
c# - 创建将 T 限制为枚举的通用方法
我正在构建一个函数来扩展这个Enum.Parse
概念
- 允许在未找到 Enum 值的情况下解析默认值
- 不区分大小写
所以我写了以下内容:
我得到一个错误约束不能是特殊类System.Enum
。
很公平,但是是否有一种解决方法来允许通用枚举,或者我将不得不模仿该Parse
函数并将类型作为属性传递,这会强制对您的代码进行丑陋的装箱要求。
编辑以下所有建议都非常感谢,谢谢。
已经确定(我已经离开循环以保持不区分大小写 - 我在解析 XML 时使用它)
编辑:(2015 年 2 月 16 日)Christopher Currens在下面的 MSIL 或 F# 中发布了一个编译器强制类型安全的通用解决方案,非常值得一看,并点赞。如果解决方案在页面上进一步冒泡,我将删除此编辑。
编辑 2:(2021 年 4 月 13 日)由于这个问题现在已经得到解决和支持,自 C# 7.3 以来,我已经改变了接受的答案,尽管全面阅读顶级答案对于学术和历史兴趣是值得的 :)
c# - Most common C# bitwise operations on enums
For the life of me, I can't remember how to set, delete, toggle or test a bit in a bitfield. Either I'm unsure or I mix them up because I rarely need these. So a "bit-cheat-sheet" would be nice to have.
For example:
or
Can you give examples of all the other common operations, preferably in C# syntax using a [Flags] enum?
c# - 如何获取枚举的基础值
我声明了以下枚举:
如何从 TransactionTypeCode.Shipment 中获取值“S”或从 TransactionTypeCode.Receipt 中获取值“R”?
简单地执行 TransactionTypeCode.ToString() 会给出一个枚举名称“Shipment”或“Receipt”的字符串,因此它不会减少芥末。
c# - 如何枚举一个枚举
你如何enum
在 C# 中枚举一个?
例如,以下代码无法编译:
它给出了以下编译时错误:
“西装”是一种“类型”,但用作“变量”
它在关键字上失败Suit
,第二个。
c# - 我需要一个辅助方法来比较一个字符枚举和一个装箱的字符到一个对象
我有一个如下所示的枚举:
我正在从数据库中提取数据,用一个字符表示 - 你猜对了 - 'O' 事务是打开的还是 'C' 事务是关闭的。
现在因为数据作为对象从数据库中出来,所以我在编写比较代码时花了不少时间。
我能做的最好的就是写:
但是,这不是我必须处理的唯一字符枚举,我有 5 或 6 个,并且为它们编写相同的方法至少可以说很烦人。 据说所有枚举都继承自 System.Enum但如果我尝试将其设置为输入类型,则会出现编译错误。这也在 .NET 1.1 中,所以泛型是不可能的。
我已经为此苦苦挣扎了一段时间。有没有人有更好的方法来编写这种方法?另外,任何人都可以澄清整个枚举继承自 System.Enum 但不是多态的东西吗?
python - 我应该如何最好地模拟和/或避免 Python 中的枚举?
我一直在使用一个小类来模拟一些 Python 项目中的枚举。有没有更好的方法或者这在某些情况下最有意义?
类代码在这里:
c++ - 我应该使用#define、枚举还是常量?
在我正在处理的 C++ 项目中,我有一个标志类型的值,它可以有四个值。这四个标志可以组合。标志描述数据库中的记录,可以是:
- 新纪录
- 删除记录
- 修改记录
- 现有记录
现在,对于我希望保留此属性的每条记录,我可以使用枚举:
但是,在代码的其他地方,我需要选择哪些记录对用户可见,所以我希望能够将其作为单个参数传递,例如:
所以,似乎我有三种可能的方法:
或者
或者
空间要求很重要(字节与整数),但并不重要。使用定义我失去了类型安全性,并且enum
我失去了一些空间(整数)并且当我想要进行按位运算时可能不得不强制转换。我const
认为我也失去了类型安全性,因为随机uint8
可能会错误地进入。
还有其他更清洁的方法吗?
如果没有,你会用什么,为什么?
PS 其余的代码是相当干净的没有#define
s 的现代 C++,而且我在少数空间中使用了命名空间和模板,所以这些也不是没有问题的。
java - 如何为此类枚举构建接口
我有以下枚举:
是否可以构建 StringEnum 接口以确保每个枚举都有 find()、toString() 和构造函数?
谢谢。