Fra*_*oty 0 .net enums f# colors
我的想法是在一些颜色之间切换,所以我不必使用多个笔,但我只能声明一个.
我不太确定能够准确理解枚举是如何工作的,请纠正我:
type ColorType =
| Red = Color.Red
| Green = Color.Green
| Blue = Color.Blue
Run Code Online (Sandbox Code Playgroud)
我希望用它:
let p = new Pen(ColorType.[index])
g.DrawRectangle(p, 0, 0, 10, 10)
Run Code Online (Sandbox Code Playgroud)
其中index是一个int变量(0到2)我将用来切换我的颜色.问题是我无法声明枚举,不接受Color.可能的解决方案?
要按索引访问颜色,可以将它们放在一个数组中:
let colors =
[|
Color.Red
Color.Green
Color.Blue
|]
let p = new Pen(colors.[index])
g.DrawRectangle(p, 0, 0, 10, 10)
Run Code Online (Sandbox Code Playgroud)
您可能希望使用数组或其他集合来存储颜色:
let colors =
[| Color.Red
Color.Green
Color.Blue |]
let p = new Pen(colors.[index])
g.DrawRectangle(p, 0, 0, 10, 10)
Run Code Online (Sandbox Code Playgroud)
枚举设计用于完全不同的目的.如果要枚举许多选项并按名称访问它们(而不是通过索引访问它们),它们很有用.例如,您可以使用枚举来表示某些状态机的状态,或其他选项.
在您的示例中,如果您想将不同颜色与不同类型的图形元素相关联,它们将非常有用.假设您想使用一种颜色作为背景而另一种颜色用于前景 - 您可以定义枚举或F#distriminated union来表示两种情况:
type ColorType =
| Foreground
| Background
Run Code Online (Sandbox Code Playgroud)
...然后你可以定义一个集合,将实际颜色分配给各个类型:
let colors =
dict [ (ColorType.Foreground, Color.Red);
(ColorType.Background, Color.Black) ]
Run Code Online (Sandbox Code Playgroud)
然后你可以colors.[ColorType.Foreground]用来获得指定种类的颜色(在这种情况下会是红色).但是,您无法通过索引访问枚举(或F#区分联合)的情况.
这是F#的基本方面,所以你可能想查看F#WikiBook,阅读MSDN上的一些介绍或者购买其中一本F#书.