如何遍历一个枚举并强制转换为obj

斯蒂芬·霍斯金

如何在F#中枚举枚举/类型告诉我们如何在F#中获取.Net枚举类型的枚举器:

利用: Enum.GetValues(typeof<MyType>)

但是,当我将其投入使用时,我发现了一个限制。我可以解决该限制,但是我正在寻找更好的方法。

问题在于该解决方案返回一个.Net对象数组,但是要使用它,我们需要强制转换,并且强制转换很难进行迭代。

type Colors =
| Red = 0
| Blue = 1
| Green = 2

// Strongly typed function, to show the 'obj' in real use
let isFavorite color = color = Colors.Green

// Iterate over the Enum (Colors)
for color in Enum.GetValues(typeof<Colors>) do
    printfn "Color %A. Is Favorite -> %b" color (isFavorite color)  // <-- Need to cast

(IsFavorite color)提高之间的冲突类型Colors和(预期)obj(实际)

这很容易解决:

for obj in Enum.GetValues(typeof<Colors>) do
    printfn "Color %A. Is Favorite -> %b" obj (isFavorite (unbox<Colors> obj))

但是,如果一个人需要(unbox<Colors> obj)在多个地方怎么办?

本地let color = ...就足够了,但是,理想情况下,我们将使用返回一个的枚举表达式seq<Colors>

我已经能够构建该表达式,但是它是:难以建造;以及b。wind。

let colorsSeq = 
     Seq.cast (Enum.GetValues(typeof<Colors>)) 
     |> Seq.map (fun o -> unbox<Colors> o)

for color in colorsSeq do
    printfn "Color %A. Is Favorite -> %b" color (isFavorite color)

有更好的表达方式吗?

约翰·帕尔默

这似乎是最简单的版本:

let t : Colors seq = unbox (Enum.GetValues(typeof<Colors>)) 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何遍历一个枚举并强制转换为obj

来自分类Dev

如何将一个枚举值强制转换/分配给另一个枚举

来自分类Dev

如何将bindgen生成的C样式枚举转换为另一个枚举?

来自分类Dev

如何将对象数组转换为一个对象我可以obj.find()在

来自分类Dev

如何遍历一个类中的几个枚举

来自分类Dev

如何遍历一个枚举的所有值,包括任何嵌套的枚举?

来自分类Dev

无法使用as运算符或简单的强制转换将列表转换或强制转换为另一个列表

来自分类Dev

我有一个强制转换错误(从字符串转换为整数)

来自分类Dev

将枚举值向量转换为另一个向量

来自分类Dev

将枚举JavaScript转换为数组,然后在数组中选择一个随机元素

来自分类Dev

允许将一个类强制转换为Java中的另一个类

来自分类Dev

将类型“ 340”强制转换为int会导致“ 34”丢失最后一个零

来自分类Dev

类强制转换为Android上同一个类

来自分类Dev

为什么将通用返回类型强制转换为另一个通用类型?

来自分类Dev

无法将类型为PageViewController的值强制转换为另一个Controller

来自分类Dev

使用枚举之类的函数遍历一个numpy数组

来自分类Dev

如何将几个 IF 转换为一个 LOOP

来自分类Dev

如何将大矩阵的数据类型强制转换为R中的另一个相似矩阵

来自分类Dev

如何通过一个键将一个深度json转换为几个深度?

来自分类Dev

如何将一个数组转换为Java中的一个链表

来自分类Dev

如何将多个视频一个接一个地转换为AVI

来自分类Dev

如何将一个对象转换为一个对象数组?

来自分类Dev

如何将两个列表转换为一个数据列表,将一个列表转换为一个数据框?

来自分类Dev

为什么在C ++中可以将一个类的指针强制转换为另一类的指针?

来自分类Dev

为什么在C ++中可以将一个类的指针强制转换为另一类的指针?

来自分类Dev

如何动态地从另一个kext强制转换一个类?

来自分类Dev

如何强制在每个列的名称(枚举)中,每个列中只有一个“ true”值?

来自分类Dev

比较强制转换为对象的两个枚举值

来自分类Dev

应该使用哪种类型的C ++强制转换将结构的指针强制转换为其第一个成员?

Related 相关文章

  1. 1

    如何遍历一个枚举并强制转换为obj

  2. 2

    如何将一个枚举值强制转换/分配给另一个枚举

  3. 3

    如何将bindgen生成的C样式枚举转换为另一个枚举?

  4. 4

    如何将对象数组转换为一个对象我可以obj.find()在

  5. 5

    如何遍历一个类中的几个枚举

  6. 6

    如何遍历一个枚举的所有值,包括任何嵌套的枚举?

  7. 7

    无法使用as运算符或简单的强制转换将列表转换或强制转换为另一个列表

  8. 8

    我有一个强制转换错误(从字符串转换为整数)

  9. 9

    将枚举值向量转换为另一个向量

  10. 10

    将枚举JavaScript转换为数组,然后在数组中选择一个随机元素

  11. 11

    允许将一个类强制转换为Java中的另一个类

  12. 12

    将类型“ 340”强制转换为int会导致“ 34”丢失最后一个零

  13. 13

    类强制转换为Android上同一个类

  14. 14

    为什么将通用返回类型强制转换为另一个通用类型?

  15. 15

    无法将类型为PageViewController的值强制转换为另一个Controller

  16. 16

    使用枚举之类的函数遍历一个numpy数组

  17. 17

    如何将几个 IF 转换为一个 LOOP

  18. 18

    如何将大矩阵的数据类型强制转换为R中的另一个相似矩阵

  19. 19

    如何通过一个键将一个深度json转换为几个深度?

  20. 20

    如何将一个数组转换为Java中的一个链表

  21. 21

    如何将多个视频一个接一个地转换为AVI

  22. 22

    如何将一个对象转换为一个对象数组?

  23. 23

    如何将两个列表转换为一个数据列表,将一个列表转换为一个数据框?

  24. 24

    为什么在C ++中可以将一个类的指针强制转换为另一类的指针?

  25. 25

    为什么在C ++中可以将一个类的指针强制转换为另一类的指针?

  26. 26

    如何动态地从另一个kext强制转换一个类?

  27. 27

    如何强制在每个列的名称(枚举)中,每个列中只有一个“ true”值?

  28. 28

    比较强制转换为对象的两个枚举值

  29. 29

    应该使用哪种类型的C ++强制转换将结构的指针强制转换为其第一个成员?

热门标签

归档