0

我的想法是在一些颜色之间切换,所以我不必使用多支笔,但我可以只声明一支。

我不太确定是否完全了解枚举的工作原理,请纠正我:

type ColorType =
  | Red = Color.Red
  | Green = Color.Green
  | Blue = Color.Blue

我希望将其用于:

let p = new Pen(ColorType.[index])
g.DrawRectangle(p, 0, 0, 10, 10)

其中 index 是一个 int 变量(0 到 2),我将使用它来切换颜色。问题是我不能声明那个枚举,颜色不被接受。可能的解决方案?

4

2 回答 2

5

要按索引访问颜色,您可以将它们放在一个数组中:

let colors =
  [|
    Color.Red
    Color.Green
    Color.Blue
  |]

let p = new Pen(colors.[index])
g.DrawRectangle(p, 0, 0, 10, 10)
于 2012-06-11T22:12:38.570 回答
5

您可能想使用数组或其他集合来存储颜色:

let colors = 
  [| Color.Red 
     Color.Green 
     Color.Blue |]

let p = new Pen(colors.[index]) 
g.DrawRectangle(p, 0, 0, 10, 10) 

枚举是为完全不同的目的而设计的。如果您想枚举多个选项并通过名称访问它们(而不是通过索引访问它们),它们很有用。例如,您可以使用枚举来表示某些状态机的状态或其他选项。

在您的示例中,如果您想将不同的颜色与不同类型的图形元素相关联,它们会很有用。假设您想使用一种颜色作为背景,另一种颜色作为前景 - 您可以定义枚举或 F# 区分联合来表示这两种情况:

type ColorType = 
  | Foreground
  | Background

...然后您可以定义一个将实际颜色分配给各个类型的集合:

let colors = 
  dict [ (ColorType.Foreground, Color.Red);
         (ColorType.Background, Color.Black) ]

然后您可以使用colors.[ColorType.Foreground]来获取指定种类的颜色(在本例中为红色)。但是,您不能按索引访问枚举(或 F# 区分联合)的情况。

这是 F# 的基本方面,因此您可能想查看F# WikiBook,阅读MSDN 上的一些介绍或购买其中的一本 F# 书籍。

于 2012-06-11T22:13:35.097 回答