如何在 F# 中枚举枚举/类型
我有一个像这样定义的枚举类型:
type tags =
| ART = 0
| N = 1
| V = 2
| P = 3
| NULL = 4
有没有办法在标签中执行 for ...
?
这是我收到的错误:
值、构造函数、命名空间或 类型
标签
未定义
I've got an enumeration type defined like so:
type tags =
| ART = 0
| N = 1
| V = 2
| P = 3
| NULL = 4
is there a way to do a for ... in tags do
?
This is the error that I'm getting:
The value, constructor, namespace or
typetags
is not defined
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
怎么样:
这具有提供强类型列表的优点,
使用时只需执行以下操作:
How about:
This has the advantage of providing a strongly typed list
To use just do:
使用
Enum.GetValues
:Use
Enum.GetValues
:这是一个完整的示例,打印有关任何受歧视工会的信息。它展示了如何获取受歧视联合的案例以及如何获取字段(如果您需要它们)。该函数打印给定可区分联合的类型声明:
Here is a complete example that prints information about any discriminated union. It shows how to get cases of the discriminated union and also how to get the fields (in case you needed them). The function prints type declaration of the given discriminated union:
要使其成为枚举,您需要显式地为每种情况赋予值,否则它是联合类型:
To make it an enum you need to explicitly give values to each case, otherwise it's a union type:
罗伯特关于如何生成实际枚举并获取其案例的说法是正确的。如果您有真正的联合类型,则可以通过 Microsoft.FSharp.Reflection.FSharpType.GetUnionCases 函数获取案例。
Robert's right about how to generate an actual enum and get its cases. If you have a true union type, you can get the cases via the
Microsoft.FSharp.Reflection.FSharpType.GetUnionCases
function.您可以使用
Enum.GetValues
,它返回一个对象的Array
,然后您必须将其向下转换为整数值。 (注意:我使用的是 Mono 的 F# 实现;也许 .NET 的情况有所不同。)以下是我编写的一些函数,用于获取所有枚举值的列表并获取最小值和最大值:
You can use
Enum.GetValues
, which returns anArray
of objects that you then have to downcast to integer values. (Note: I'm using Mono's F# implementation; maybe things are different with .NET.)Here are some functions I wrote to get a list of all enumeration values and to get the min and max values:
在 .Net 5 中,有一个 Enum.GetValues 的通用重载,它消除了强制转换的需要。
In .Net 5 there is a generic overload of Enum.GetValues which eliminates the need for casting.